委托和事件

1、委托是一个或多个函数指针的抽象,委托是类型安全的、面向对象和安全可靠的
2、使用步骤
  声明委托public delegate int DelegateClass (string info)
  使用new关键字创建委托的一个实例DelegateClass obj1 = new DelegateClass(MethodA)
  使用调用运算符()激活一个委托obj1("1")或者显式调用obj1.Invoke("2")
  当对象不需要委托的时候,将委托实例设为null
3、委托不能作为一个类的数据成员,也不能作为方法中的一个局部变量
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) 

原文地址:https://www.cnblogs.com/changweihua/p/2175072.html