1、委托是一个或多个函数指针的抽象,委托是类型安全的、面向对象和安全可靠的
2、使用步骤 声明委托public delegate int DelegateClass (string info) 使用new关键字创建委托的一个实例DelegateClass obj1 = new DelegateClass(MethodA) 使用调用运算符()激活一个委托obj1("1")或者显式调用obj1.Invoke("2") 当对象不需要委托的时候,将委托实例设为null3、委托不能作为一个类的数据成员,也不能作为方法中的一个局部变量4、多个函数假如委托时,这些函数根据先进先出的顺序被调用5、对于实例方法,使用object.method格式,对于静态方法,使用class.method格式,如果静态方法和委托在同一个类中,则不需要类名public delegate void DelegateClass(); class Program { static void Main(string[] args) { DelegateClass del1 = new DelegateClass(Program.MethodA); DelegateClass del2 = new DelegateClass(MethodA);ZClass obj = new ZClass();
DelegateClass del3 = new DelegateClass(obj.MethodB);}
public static void MethodA()
{ } }public class ZClass
{ public void MethodB() { } }6、函数引用可以直接赋给委托,而不用new运算符,这就是委托推理 DelegateClass del1 =Program.MethodA;DelegateClass del2 = MethodA;ZClass obj = new ZClass();
DelegateClass del3 = obj.MethodB;7、函数引用的签名必须匹配目标委托的签名。通过逆变和协变可以拓展这种匹配8、异步调用 BeginInvoke方法: 可以在容纳了一个函数引用的委托上被调用 IAsyncResult BeginInvoke(arguments , AsyncCallback callback , object asyncState)