1 namespace ConsoleApplication6 2 { 3 class Program 4 { 5 static void Main(string[] args) 6 { 7 //實例化委託類 8 MyApp app=new MyApp(); 9 //事件綁定要執行的方法 10 app.PressKeyBoard += StratRun; 11 while (true) 12 { 13 //聲明鍵盤按下的值 14 int onKey; 15 //嘗試把鍵盤按下的字符串轉換int數字類型。失敗返回0; 16 int.TryParse(Console.ReadLine(), out onKey); 17 //執行觸發事件的方法(傳入總數和鍵盤按下的值) 18 app.OnPressKeyBoard(app.Count,onKey); 19 //打印總數值 20 Console.WriteLine("總數值爲:"+app.Count); 21 } 22 23 24 } 25 /// <summary> 26 /// 建立執行方法 27 /// </summary> 28 /// <param name="count"></param> 29 /// <param name="num"></param> 30 /// <returns></returns> 31 static int StratRun(int count, int num) => count + num; 32 33 } 34 /// <summary> 35 /// 第一步聲明委託 36 /// </summary> 37 /// <param name="count">計算前的總數</param> 38 /// <param name="num">數字</param> 39 /// <returns>計算後的總數</returns> 40 public delegate int PressKeyBoardEventHandler(int count,int num); 41 42 public class MyApp 43 { 44 /// <summary> 45 /// 總數 46 /// </summary> 47 public int Count = 0; 48 //第二步聲明事件實例化委託 49 public event PressKeyBoardEventHandler PressKeyBoard; 50 /// <summary> 51 /// 建立方法觸發事件 52 /// </summary> 53 /// <param name="count"></param> 54 /// <param name="num"></param> 55 /// <returns></returns> 56 public virtual void OnPressKeyBoard(int count, int num) 57 { 58 var invoke = PressKeyBoard?.Invoke(count, num); 59 if (invoke != null) 60 { 61 Count = (int) invoke; 62 } 63 } 64 } 65 }
//委託是一種類型。
//事件是委託的一個實例。
//1.聲明委託
//2,聲明事件實例化委託
//3.建立觸發事件的方法
//4.建立事件執行的綁定方法
//5.實例化該委託的類
//6.把觸發事件的方法綁定在事件上
//7.執行觸發事件方法