初次接觸委托事件時,一頭霧水,但是隨着接觸的多了,用的多了也慢慢的就懂了,現在想來其實就類似於你要做某件事情時,委托給別人做,比如小明讓室友小張幫忙帶飯,在這個例子里,就是小明通知(委托)室友小張帶飯。
先不多說,先上一段委托的一種例子
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 }