一、委托
委托相当于c/c++中的函数指针。函数指针用于获取一个函数的入口地址,实现对函数的操作。委托是面向对象的,引用类型。因此对委托的使用要“先定义,后实例化,最后调用”
1、定义委托使用关键字delegate:
delegate int SomeDelegate(int nID,string sName);
2、实例化:
SomeDelegate d1=new SomeDelegate(wr.InsranceMethod); //wr是对象,有InstanceMethod实例方法
3、调用
d1(5,"aaa");
调用的前提是InstanceMethod有参数且和定义SomeDelegate的参数一致,并返回值为int。方法定义为:
public int InstanceMethod(int nID,string sName)
二、事件
事件为类和类的实例定义发出通知,从而将事件和可执行代码捆绑在一起。C#事件是按“发布-预订”方式工作的。在一个类中发布事件,然后在任意数量类中对事件进行预订。C#事件机制是基于委托实现的,因此首先定义一个委托。
1、定义委托
public delegate void EventHandler(object sender,myEventArgs e)
2、定义事件
格式:
event 事件的委托名 事件名
例如:
public event EventHandler TextOut;
3、事件激活
if (TextOut!=null)
{
TextOut(this,new EventArgs())
};
检查TextOut事件有没有被订阅,如不为null,则表示有用户订阅。订阅事件的是事件确发类,首先实例化EventSource,然后订阅事件:
evsrc.TextOut+=new EventSource.EventHandler(CatchEvent); //evsrc是事件确发类对象
取消订阅:
evsrc.TextOut-=new EventSource.EventHandler(CatchEvent);
注意:CatchEvent方法的签名与定义的委托EventHandler签名要相同
evsre.TextOut+= new EventSource.EventHandler(CatchEvent); //ecsrc是事件确发类对象
if (TextOut!=null)
{
TextOut(this,new EventArgs())
};