委托和事件的部分基础知识可参见 C#/.NET 基础学习 之 [委托-事件] 部分 ;
参考
[1]. 初识事件 到 自定义事件;
[2]. 从类型不安全的委托 到 类型安全的事件;
[3]. 函数指针 ~ C#中的委托(Delegate)和事件(Event);
[4]. C# 中的委托和事件 - 张子阳;
C# 中的委托和事件(续) - 张子阳;
委托
委托本质是一个密封类,定义方法的类型,将方法作为方法的参数。委托包含一个具有相同签名和返回值类型的有序的方法列表(调用列表)。
委托声明:public delegate void MyDel(string str); 编译结果为:
public sealed class MyDel : System.MulticastDelegate
{
public MyDel(object @object, IntPtr method);
public virtual void Invoke(string str);
public virtual void EndInvoke(IAsyncResult res);
public virtual IAsyncResult BeginInvoke(string str, AsyncCallback callback, object @object);
}
扩展:自定义委托类 MyDel 继承于类 MulticastDelegate,MulticastDelegate 类是 System.Delegate 的子类,支持多路广播委托并维护对应的委托列表。两个常用 public 属性:
· Target:委托调用的方法所属的类实例的引用,若方法是静态方法,则为 null;
· Method:委托所表示的方法的信息;
构造函数中的参数:object 为对象实例的引用,methodPtr 用于标识回调方法,分别对应 Target 和 Method。一个常用 public 方法:
· public Delegate[] GetInvocationList();委托的调用列表中方法的数组;