委托的声明
public delegate void MyDelegate(string str);
注
1.委托的定义和方法的定义类似,只是在前面加了一个 delegate,但委托不是方法,它是一种
类型。是一种特殊的类型,看成是一种新的对象类型比较好理解。用于对与该委托有相
同签名的方法调用。
2.委托相当于 C++中的函数指针,但它是类型安全的。
3.委托是从 System.Delegate 派生,但不能象定义常规类型一样直接从 System.Delegate 派生,
对委托的声明只能通过上面的声明格式进行定义。关键字 delegate 通知编译器这是一
个委托类型,从而在编译的时候对该类进行封装,对这一过程 C#定义了专门的语法来处理
这一过程。
4.不能从一个委托类型进行派生,因为它也是默认 sealed 的
5.委托即可以对静态方法进行调用也可以对实例方法进行调用。
6.每个委托类型包含一个自己的调用列表,当组合一个委托或从一个委托中删除一个委托
时都将产生个新的调用列表。
7.两个不同类型的委托即使它们有相同的签名和返回值,但还是两个不同类型的委托。但
其实在使用中可看作是相同的。
委托的比较
C#中对委托定义了两个操作符 == 和 !=
在以下情况下两个委托是相等的:
1.当两个委托都同时为 null 的时候
2.当两个委托都不为 null 时,下列情况下是相等的。
a.当两个委托的各自的调用列表只含有一个入口点的时候
在下列情况下是相等的
(1) 调用同一对象的同一静态方法
(2) 调用同一对象的同一实例方法
b.当两个委托具有多个入口点时
在下列情况下是相等的
(1)只有当它们调用列表中的调用的方法按顺序都一一对应相同的对象及对象的同一方法
的时候
如上所述的两个不同类型的委托但是它们具有相同的签名和返回值时,只要满足上述条件
的,即使它们类型不同,但比较的结果也是相同的。
委托的异常处理
当调用该委托的方法中发生了异常时,首先在调用该委托的方法中搜寻 catch 语句块。如果
没有,则去该委托调用的方法中去寻找有没有 catch 语句块,这和调用方法发生异常的处