一直对事件的处理机制不是特别明确,今天看了‘风卷残云后’C#事件解析这篇文章后,模仿了一篇Code之后思路清晰许多,下面是代码:
1 using System;
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace T_Event
6 {
7 class Program
8 {
9 static void Main(string[] args)
10 {
11 KeyInputMonitor monitor = new KeyInputMonitor();
12
13 EventReceive receive = new EventReceive(monitor);
14
15 monitor.run();
16 }
17 }
18
21 {
22 private char keychar;
23
24 public KeyEventArg(char keychar)
25 {
26 this.keychar = keychar;
27 }
28
29 public char KeyChar
30 {
31 get
32 {
33 return keychar;
34 }
35 }
36 }
37
38 internal class KeyInputMonitor
39 {
40 public delegate void keydownhandle(object Sender,KeyEventArg e);
41
42 public event keydownhandle Onkeydownhandle;
43
44 public void run()
45 {
46 bool Flag = false;
47 do
48 {
49 Console.WriteLine("Please Input A Char");
50 string response = Console.ReadLine();
51 char rChar = (response == "") ? ' ' : char.ToUpper(response[0]);
52 switch (rChar)
53 {
54 case 'X':
55 Flag = true;
56 break;
57 default:
58 //实例化一个 KeyEventArg,获取按键信息
59 KeyEventArg keyeventarg = new KeyEventArg(rChar);
60 //触发Onkeydownhandle事件,并交于委托keydownhandle所指定的方法处理
61 Onkeydownhandle(this, keyeventarg);
62 break;
63 }
64 } while (!Flag);
65 }
66 }
67
68 internal class EventReceive
69 {
70 public EventReceive(KeyInputMonitor monitor)
71 {
72 //程序启动后订阅事件,将委托实例添加到产生事件对象的事件列表中去
73 monitor.Onkeydownhandle += new KeyInputMonitor.keydownhandle(this.Echo);
74 }
75
76 private void Echo(object sender,KeyEventArg e)
77 {
78 Console.WriteLine( "Capture key: {0}", e.KeyChar );
79 //看看sender(this)传递的是什么值,原来就是KeyInputMonitor类
80 string strsender = sender.ToString();
81 Console.WriteLine(strsender);
82 }
83 }
2 using System.Collections.Generic;
3 using System.Text;
4
5 namespace T_Event
6 {
7 class Program
8 {
9 static void Main(string[] args)
10 {
11 KeyInputMonitor monitor = new KeyInputMonitor();
12
13 EventReceive receive = new EventReceive(monitor);
14
15 monitor.run();
16 }
17 }
18
19 //此类用来保存按键信息
//internal修饰符:使用该修饰符声明的类型或成员只能在同一程集内访问接口的成员
21 {
22 private char keychar;
23
24 public KeyEventArg(char keychar)
25 {
26 this.keychar = keychar;
27 }
28
29 public char KeyChar
30 {
31 get
32 {
33 return keychar;
34 }
35 }
36 }
37
38 internal class KeyInputMonitor
39 {
40 public delegate void keydownhandle(object Sender,KeyEventArg e);
41
42 public event keydownhandle Onkeydownhandle;
43
44 public void run()
45 {
46 bool Flag = false;
47 do
48 {
49 Console.WriteLine("Please Input A Char");
50 string response = Console.ReadLine();
51 char rChar = (response == "") ? ' ' : char.ToUpper(response[0]);
52 switch (rChar)
53 {
54 case 'X':
55 Flag = true;
56 break;
57 default:
58 //实例化一个 KeyEventArg,获取按键信息
59 KeyEventArg keyeventarg = new KeyEventArg(rChar);
60 //触发Onkeydownhandle事件,并交于委托keydownhandle所指定的方法处理
61 Onkeydownhandle(this, keyeventarg);
62 break;
63 }
64 } while (!Flag);
65 }
66 }
67
68 internal class EventReceive
69 {
70 public EventReceive(KeyInputMonitor monitor)
71 {
72 //程序启动后订阅事件,将委托实例添加到产生事件对象的事件列表中去
73 monitor.Onkeydownhandle += new KeyInputMonitor.keydownhandle(this.Echo);
74 }
75
76 private void Echo(object sender,KeyEventArg e)
77 {
78 Console.WriteLine( "Capture key: {0}", e.KeyChar );
79 //看看sender(this)传递的是什么值,原来就是KeyInputMonitor类
80 string strsender = sender.ToString();
81 Console.WriteLine(strsender);
82 }
83 }
84 }
注释是按自己的理解写的,如果理解有误欢迎指正