zoukankan      html  css  js  c++  java
  • 委托和事件

    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) 

  • 相关阅读:
    net core 3.1 依赖注入
    vue temeplete standard
    net core 3.1 Global
    vue Multiple selection
    c# mvc modelstate
    vue temeplete
    vue element pickdate combox input 排版
    c# 生成 验证码
    vue checkbox ajax
    js算法(2)
  • 原文地址:https://www.cnblogs.com/changweihua/p/2175072.html
Copyright © 2011-2022 走看看