.NET基础示例系列之六:委托及事件
委托是一个类。
定义委托时,实是定义一个用户自定义的类,它能代表具有相同参数列表和返回类型的任何方法,方法可以是静态方法或成员方法。示例:
public partial class Form1 : Form
{
private void button1_Click(object sender, EventArgs e)
{
MyClass mc = new MyClass();
mc.dlg = new MyDelegate(DlgMethod);
mc.dlg += new MyDelegate(DlgMethod2);//多播
mc.TriggerDlg();
}
private void DlgMethod(string s)
{
//do some work
MessageBox.Show(s);
}
private void DlgMethod2(string s)
{
//do some work
MessageBox.Show("multicast:"+s);
}
}
public delegate void MyDelegate(string s);
class MyClass
{
public MyDelegate dlg;
public void TriggerDlg()
{
if (dlg != null)
{
dlg("param string for delegate");
}
}
}
事件是委托的一个实例。
《C#程序员参考手册》:C#使用一种委托模型来实现事件。事件的处理方法不必在将生成事件的类中定义。这种机制有许多优势。例如,它既有普遍性,又很灵活。设想应用程序中有两个按钮,但这两个按钮的作用不同。如果事件处理程序被绑定到事件源,我们可能必须写两个派生的按钮类,每个派生类有自己的事件处理程序。
……事件生成者把事件委托的一个实例定义为它的成员。事件消费者是那些希望在事件发生时得到通知的对象。它们定义将和事件委托关联的事件处理方法。当生成事件时,事件生成者通过调用事件委托“触发”事件。然后委托调用和它关联的事件处理方法。示例:
public delegate void MyDelegate(string s);
class MyClass
{
public event MyDelegate myEventHandler;
public List<string> l;
public MyClass()
{
l = new List<string>();
}
public void AddElement(string s)
{
l.Add(s);
if (myEventHandler!=null)
{
myEventHandler("add element:"+s);
}
}
}
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
MyClass mc = new MyClass();
mc.myEventHandler+=new MyDelegate(mc_myEventHandler);
mc.AddElement("Book1");
}
private void mc_myEventHandler(string s)
{
MessageBox.Show(s);
}
}
![]() |
关注作者:欢迎扫码关注公众号「后厂村思维导图馆」,获取本人自建的免费ChatGPT跳板地址,长期有效。 原文链接:https://www.cnblogs.com/morvenhuang/archive/2006/08/26/486940.html 版权声明:本文版权归作者和博客园共有,欢迎转载,但未经作者同意必须在文章页面给出原文链接,否则保留追究法律责任的权利。 |
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· go语言实现终端里的倒计时
· 如何编写易于单元测试的代码
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· 周边上新:园子的第一款马克杯温暖上架
· 分享 3 个 .NET 开源的文件压缩处理库,助力快速实现文件压缩解压功能!
· Ollama——大语言模型本地部署的极速利器
· DeepSeek如何颠覆传统软件测试?测试工程师会被淘汰吗?
· 使用C#创建一个MCP客户端