C++实现C#的事件机制

2014-11-24 12:34:47 · 作者: · 浏览: 0

C#的事件机制让C#程序员如鱼得水,尤其在架构的时候,事件驱动机制让弱耦合成为一种主流。但对于我们从事C++开发的程序员来说,心理甚是羡慕嫉妒恨,尤其像我这种半路从C#出家C++的。

本文实现的是C++模仿C#的事件。

与C#的事件机制表现形式比较:

相似点:采用+=、-=运算符实现事件注册注销工作

差异点:本文中使用事件的类,第一个成员变量必须是CObjectSender ,自定义事件类第一个成员变量必须为EventArgs。

测试类:

1 #include "stdafx.h"

2 #include

3 #include

4 #include

5 #include "HunterEvent.h"

6 using namespace std;

7

8 // 事件参数

9 class MyEventArgs

10 {

11 public:

12 EventArgs args;

13 int age;

14 };

15

16 // 学生类,测试类

17 class Student

18 {

19 private:

20 ObejctSender sender;

21 int age;

22

23 public:

24 HunterEvent m_event;

25

26 // 设置年龄

27 void SetAge(int p)

28 {

29 age = p;

30 }

31

32 // 获取年龄

33 int GetAge()

34 {

35 return age;

36 }

37

38 // 事件触发器

39 void Trigger()

40 {

41 MyEventArgs arg;

42 arg.age = age;

43 m_event.Trigger(&sender, &arg.args);

44 }

45 };

46

47 void MMSSS(ObejctSender* sender, EventArgs* args)

48 {

49 int temp1 = ((Student*)sender)->age;

50 int temp2 = ((MyEventArgs*)args)->age;

51 cout<<"1111 sender "<<" eventargs "<

52 }

53

54 void SSSMM(ObejctSender* sender, EventArgs* args)

55 {

56 int temp1 = ((Student*)sender)->age;

57 int temp2 = ((MyEventArgs*)args)->age;

58 cout<<"2222 sender "<<" eventargs "<

59 }

60

61 int _tmain(int argc, _TCHAR* argv[])

62 {

63 cout<<"未绑定事件"<<'\n';

64 Student s;

65 s.Trigger();

66

67 cout<

68

69 cout<<"绑定MMSSS事件,10岁"<<'\n';

70 s.SetAge(10);

71 s.m_event += MMSSS;

72 s.Trigger();

73

74

75 cout<<"绑定MMSSS与SSSMM事件,10岁"<<'\n';

76 s.m_event += SSSMM;

77 s.Trigger();

78

79 cout<<"绑定MMSSS与SSSMM事件,20岁"<<'\n';

80 s.SetAge(20);

81 s.Trigger();

82

83 cout<<"注销MMSSS事件,20岁"<<'\n';

84 s.m_event -= MMSSS;

85 s.Trigger();

86 system("PAUSE");

87 return 0;

88 }

运行结果:

\

源码下载地址:http://download.csdn.net/detail/fryhunter/3828019

作者 BLoodMaster