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(); } }