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      }        

 

     

  


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM