初次接触委托事件时,一头雾水,但是随着接触的多了,用的多了也慢慢的就懂了,现在想来其实就类似于你要做某件事情时,委托给别人做,比如小明让室友小张帮忙带饭,在这个例子里,就是小明通知(委托)室友小张带饭。
先不多说,先上一段委托的一种例子
1 //小张类 2 public class MrZhang 3 { 4 //其实买车票的悲情人物是小张 5 public static void BuyFood() 6 { 7 Console.WriteLine("去买饭!"); 8 } 9 } 10 11 //小明类 12 class MrMing 13 { 14 //声明一个委托,其实就是个“命令” 15 public delegate void BuyFoodEventHandler(); 16 17 public static void Main(string[] args) 18 { 19 //这里就是具体阐述这个命令是干什么的,本例是MrZhang.BuyFood“小张买饭” 20 BuyFoodEventHandler myDelegate = new BuyFoodEventHandler(MrZhang.BuyFood); 21 22 //这时候委托被附上了具体的方法 23 myDelegate(); 24 Console.ReadKey(); 25 } 26 }
声明一个委托,然后会有对应的一个方法,在委托实例化时传进来,调用的时候像调用一个方法时调用的,在具体使用哪个方法时,直接像传递参数一样将方法传进去。
我们来看下委托的定义:
访问修饰符 delegate 返回值类型 委托名称(参数1, 参数1, 参数n…);
例如:public delegate void BuyFoodEventHandler ();//没有参数,也没有返回类型的
public delegate int AA (int num);//返回值为int类型的,有一个参数的委托
1、在实例化委托对象时,委托的方法必须要有,因为委托的构造函数是不为空的,如:
BuyFoodEventHandler myDelegate = new BuyFoodEventHandler(MrZhang.BuyFood);
其中BuyFoodEventHandler (委托方法)
2、委托的参数和返回类型,都要和具体的委托方法的一致
我们在来说说泛型委托system.Action和system.Func:
system.Action:是没有返回参数的
system.Func:是带有返回参数的
刚刚上面的例子我们可以用泛型委托
1 //小张类 2 public class MrZhang { 3 public static void BuyFood() { 4 Console.WriteLine("去买饭!"); 5 } 6 } 7 8 9 //小明类 10 class MrMing 11 { 12 //声明一个委托,其实就是个“命令” 13 public System.Action buyFoodEventHandler(); //没有返回类型,也没有参数 14 15 public static void Main(string[] args) 16 { 17 //这里就是具体阐述这个命令是干什么的,本例是MrZhang.BuyFood“小张买饭” 18 buyFoodEventHandler += MrZhang.BuyFood; 19 20 //这时候委托被附上了具体的方法 21 buyFoodEventHandler(); 22 Console.ReadKey(); 23 } 24 }