匿名委托可以访问局部变量,而原始的委托则必须利用别的方法才可以做到
public class Class1
{
public void AddSendTextEventHandler(SendTextEventHandler st)
{
SendTextEvent += st;
}
public event SendTextEventHandler SendTextEvent;
public void doall()
{
SendTextEvent("1");
//为了让效果看的明显,故方法休眠1秒钟
System.Threading.Thread.Sleep(1000);
do1();
SendTextEvent("2");
System.Threading.Thread.Sleep(1000);
do2();
SendTextEvent("3");
System.Threading.Thread.Sleep(1000);
do3();
SendTextEvent("4");
System.Threading.Thread.Sleep(1000);
do4();
}
void do1()
{ }
void do2()
{ }
void do3()
{ }
void do4()
{ }
}
public delegate void SendTextEventHandler(string text);
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
LoadData();
}
void LoadData()
{
Class1 c = new Class1();
//Form2为一个普通窗体类,为局部变量,主要是为了用其Text属性显示SendTextEvent传过来的text
Form2 f = new Form2();
f.Show();
//方法1,通过原始的方法注册委托对象(事件)
c.SendTextEvent += new SendTextEventHandler(c_SendTextEvent);
//方法2,利用匿名委托
c.SendTextEvent += delegate(string text)
{
//注意,f为局部变量,可以在这里操作
f.Text = text;
};
c.doall();
}
//方法2的原始委托注册方式
void c_SendTextEvent(string text)
{
//注意,如果是这种原始方式,Form2的对象f要通过别的方式如建立全局变量来处理器Text属性
}
}
public partial class Form2 : Form
{
public Form2()
{
InitializeComponent();
}
}
static void Main()
{
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 周边上新:园子的第一款马克杯温暖上架
· Open-Sora 2.0 重磅开源!
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· [AI/GPT/综述] AI Agent的设计模式综述