關于C#事件
1
/**//*
2
* 該程序是介紹關于事件的處理過程,使用c#提供的規范化模式
3
* 出版社和訂閱者的模式,出版社要定義事件,訂閱者來定義響應事件函數
4
*
5
*/
6
using System;
7
using System.Collections.Generic;
8
using System.Text;
9
10
class PubEventArgs : EventArgs //事件傳遞參數類
11

{
12
private readonly string m_magazineName;
13
private readonly DateTime m_pubDate;
14
public PubEventArgs(string magazineName, DateTime pubDate)
15
{
16
m_magazineName = magazineName;
17
m_pubDate = pubDate;
18
}
19
public string magazineName
20
{
21
get
{ return m_magazineName; }
22
}
23
public DateTime pubDate
24
{
25
get
{ return m_pubDate; }
26
}
27
}
28
29
class Publisher
30

{
31
public delegate void PubComputerEventHandler(object sender, PubEventArgs e); //定義事件委托
32
public delegate void PubLifeEventHandler(object sender, PubEventArgs e);
33
public event PubComputerEventHandler PubComputer;
34
public event PubLifeEventHandler PubLife; //根據委托類型定義事件
35
protected virtual void OnPubComputer(PubEventArgs e) /**//*觸發事件*/
36
{
37
PubComputerEventHandler handler = PubComputer;
38
if (handler != null)
39
{
40
/**//*實際上觸發的是這個委托鏈*/
41
handler(this, e);
42
}
43
}
44
protected virtual void OnPubLife(PubEventArgs e)
45
{
46
PubLifeEventHandler handler = PubLife;
47
if (handler != null)
48
{
49
handler(this, e);
50
}
51
}
52
public void issueComputer(string magazineName, DateTime pubDate) //觸發方法
53
{
54
Console.WriteLine("發行"+magazineName);
55
OnPubComputer(new PubEventArgs(magazineName,pubDate));
56
}
57
public void issueLife(string magazineName, DateTime pubDate)
58
{
59
Console.WriteLine("發行"+magazineName);
60
OnPubLife(new PubEventArgs(magazineName, pubDate));
61
}
62
}
63
64
class Subscriber
65

{
66
private string name;
67
public Subscriber(string name)
68
{
69
this.name = name;
70
}
71
public void Receive(object sender ,PubEventArgs e)
72
{
73
Console.WriteLine(e.pubDate+" "+name+"已經收到"+e.magazineName);
74
}
75
}
76
77
namespace CSEventTestProc
78

{
79
class Program
80
{
81
static void Main(string[] args)
82
{
83
Publisher pub = new Publisher();
84
Subscriber zs = new Subscriber("張三");
85
Subscriber ls = new Subscriber("李四");
86
pub.PubComputer += new Publisher.PubComputerEventHandler(zs.Receive);
87
pub.PubComputer += new Publisher.PubComputerEventHandler(ls.Receive);
88
pub.PubLife += new Publisher.PubLifeEventHandler(ls.Receive);
89
90
pub.issueComputer("電腦雜志", Convert.ToDateTime("2010-12-24"));
91
pub.issueLife("生活雜志", Convert.ToDateTime("2010-12-24"));
92
93
Console.WriteLine("一年后……");
94
pub.PubComputer -= new Publisher.PubComputerEventHandler(ls.Receive);
95
pub.issueComputer("電腦雜志", Convert.ToDateTime("2010-12-24"));
96
pub.issueLife("生活雜志", Convert.ToDateTime("2010-12-24"));
97
}
98
}
99
}
100


2

3

4

5

6

7

8

9

10

11



12

13

14

15



16

17

18

19

20



21



22

23

24



25



26

27

28

29

30



31

32

33

34

35


36



37

38

39



40


41

42

43

44

45



46

47

48



49

50

51

52

53



54

55

56

57

58



59

60

61

62

63

64

65



66

67

68



69

70

71

72



73

74

75

76

77

78



79

80



81

82



83

84

85

86

87

88

89

90

91

92

93

94

95

96

97

98

99

100
