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.执行触发事件方法