1、委托(delegate)可以认为是包含具有相同签名和返回值类型的有序方法列表。方法的列表称为调用列表(invocation list),当委托被调用是,它调用列表中的每一个方法。
2、由委托保存的方法可以来自任何类和结构,只要它们同时匹配委托如下两点:
2.1 返回值 2.2 签名(包括ref和out修饰符),同时调用列表中的方法可以是实例方法或是静态方法。
3、委托是一种类型,就好像类是类型一样。与类一样,委托类型必须在被用来创建变量以及类型的对象之前声明。委托类型的声明和所有类型声明一样,不需要在类内部声明,例如
delegate void MyDel(int x);
委托类型的声明开上去与方法的声明很相似,又返回类型和签名。返回类型和签名指定了委托接受的方法的形式。
4、创建委托对象
委托是引用类型,因此有引用和对象。在委托声明之后,我们可以声明变量并创建类型的对象。例如:MyDel delvar;
有两种创建委托对象的方式,第一种是使用带new运算符的对象创建表达式。delvar=new MyDel(myInstobj.MyM1); 或者delvar=new MyDel(SClass.OtherM2);
第二种方法是使用快捷语法,它仅由方法说明符构成。使用快捷语法是因为在方法名称和其相应的委托类型之间有隐式转换。delvar=myInstobj.MyM1; 或者devar=SClass.OtherM2;
5、 由于委托是引用类型,我们通过给它复制类改变包含在委托中的引用,旧的委托对象会被垃圾回收器回收。