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