程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> C語言 >> C++ >> C++入門知識 >> C++實現C#的事件機制

C++實現C#的事件機制

編輯:C++入門知識

 

  C#的事件機制讓C#程序員如魚得水,尤其在架構的時候,事件驅動機制讓弱耦合成為一種主流。但對於我們從事C++開發的程序員來說,心理甚是羨慕嫉妒恨,尤其像我這種半路從C#出家C++的。

 

      本文實現的是C++模仿C#的事件。

 

 

      與C#的事件機制表現形式比較:

 

      相似點:采用+=、-=運算符實現事件注冊注銷工作

 

 

      差異點:本文中使用事件的類,第一個成員變量必須是CObjectSender ,自定義事件類第一個成員變量必須為EventArgs。

 

 

      測試類:

 

 1 #include "stdafx.h"

 2 #include <string>

 3 #include <iostream>

 4 #include <list>   

 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 "<<temp2<<'\n';

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 "<<temp2<<'\n';

59 }

60

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

62 {

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

64     Student s;

65     s.Trigger();

66

67     cout<<sizeof(Student)<<'\n';

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

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved