C#的委托

  初次接触委托事件时,一头雾水,但是随着接触的多了,用的多了也慢慢的就懂了,现在想来其实就类似于你要做某件事情时,委托给别人做,比如小明让室友小张帮忙带饭,在这个例子里,就是小明通知(委托)室友小张带饭。

  先不多说,先上一段委托的一种例子

 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      }        

 

     

  

posted @ 2016-03-18 17:53  简*单  阅读(3726)  评论(0编辑  收藏  举报