.net 委托事件

.NET中的委托和事件机制解析,委托作为一个类,可以代表具有相同参数列表和返回类型的方法。事件则是委托的一个实例,用于通知事件消费者在特定情况下执行操作。文章通过具体代码示例展示了如何定义和使用委托及事件。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

事件就是一个委托的一个实例

委托是一个类。

定义委托时,实是定义一个用户自定义的类,它能代表具有相同参数列表和返回类型的任何方法,方法可以是静态方法或成员方法。示例:

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);

}

}

posted on 2013-02-20 22:25  v.e.n.u.s 阅读( ...) 评论( ...) 编辑 收藏

转载于:https://www.cnblogs.com/jx270/archive/2013/02/20/2919770.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值