委托写法学习

public delegate void MyDelegate();
    public class MyClass
    {
        public void MyFunc()
        {
            Console.WriteLine("MyFunc Run");
        }
    }
    public class Program
    {
        static void Main(string[] args)
        {
            MyClass myClass = new MyClass();
            MyDelegate myDelegate;
            //1.使用new创建委托对象时指定方法
            myDelegate = new MyDelegate(myClass.MyFunc);  //先用=运算符创建实例,=后面同样可以使用以下任何一种方式进行赋值
            //2.直接用方法名赋值
            myDelegate += myClass.MyFunc;
            //3.使用匿名方法赋值
            myDelegate += delegate ()
            {
                Console.WriteLine("Anonymous methods run");
            };
            //4.使用Lambda表达式赋值
            myDelegate += () =>
            {
                Console.WriteLine("Lambda run");
            };
            //5.使用相同类型的委托实例赋值
            myDelegate += new MyDelegate(myClass.MyFunc);
            //6.使用-=运算符删除委托中指定的方法
            myDelegate -= myClass.MyFunc;  //※只能通过此种方式才可以将委托列表中指定方法移除,不能通过myClass = null等方式移除
            
            //执行委托中的方法
            myDelegate();
            //或者通过其Invoke()方法执行委托
            //myDelegate.Invoke();
            //增加非空判断
            //if (myDelegate != null) myDelegate();
            //或者简化为(需要C#6.0以上)
            //myDelegate?.Invoke();
            
            Console.ReadKey();
        }
    }

 

上一篇:C+引用和const关键字


下一篇:微信小程序开发 遇到的IOS兼容问题