委托(delegate)是C#1.0就出现的一个技术,委托就是将方法囊括其中,可以将委托看做一个类的接口,但是在通过Lambda表达式的加入后,委托的实现就像对容易了很多。
委托的构成:4方面
1.声明委托类型:就是定义delegate;
2.必须有需要执行的代码:就是要注册到委托里的方法;
3.创建委托实例:注册到委托;
4.执行invoke委托实例;
lambda表达式的出现就能简略后面2,3,4步,在实现委托的时候可以使用更加方便。
using System; namespace DelegateAndEvent { //定义一个事件类 public class MyEvent { //定义一个委托 public delegate void MyDelegate(); //定义一个事件 public MyDelegate MyDelegateEvent; //定义一个触发事件的函数 public void OnMyDelegateEvent() { //判断事件是否非空 if (MyDelegateEvent != null) { //执行事件 MyDelegateEvent(); } //MyDelegateEvent?.Invoke(); //简化的判断和执行 } } class Program { //输出一串字符 public static void putOutChar() { Console.WriteLine("I was fired"); } //输出第二串字符 public static void putOutChar2() { Console.WriteLine("I was fired22222"); } static void Main(string[] args) { //实例化MyEvent2类 MyEvent myEvent = new MyEvent(); //注册一个事件 myEvent.MyDelegateEvent += new MyEvent.MyDelegate(putOutChar); myEvent.MyDelegateEvent += new MyEvent.MyDelegate(putOutChar2); //执行触发事件的函数 Console.WriteLine("执行绑定了两个事件后的函数"); //调用事件(启动事件)
myEvent.OnMyDelegateEvent(); //解绑一个事件 myEvent.MyDelegateEvent -= new MyEvent.MyDelegate(putOutChar); //再次执行触发事件的函数 Console.WriteLine("执行解绑了一个事件后的函数"); myEvent.OnMyDelegateEvent(); Console.ReadKey(); } } }