Multicast.cpp
上传用户:sz0451
上传日期:2022-07-29
资源大小:256k
文件大小:2k
源码类别:

.net编程

开发平台:

Visual C++

  1. // This is the main project file for VC++ application project 
  2. // generated using an Application Wizard.
  3. #include "stdafx.h"
  4. #using <mscorlib.dll>
  5. using namespace System;
  6. __delegate void NotifyDelegate(int);
  7. __gc class Client1
  8. {
  9. public:
  10.     static void NotifyFunction1(int n)
  11.     {
  12.         Console::WriteLine("Client1: got value {0}", __box(n));
  13.     }
  14. };
  15. __gc class Client2
  16. {
  17. public:
  18.     static void NotifyFunction2(int n)
  19.     {
  20.         Console::WriteLine("Client2: got value {0}", __box(n));
  21.     }
  22. };
  23. // This is the entry point for this application
  24. #ifdef _UNICODE
  25. int wmain(void)
  26. #else
  27. int main(void)
  28. #endif
  29. {
  30.     Console::WriteLine("Multicast Delegates");
  31.     
  32.     // Declare two delegates
  33.     NotifyDelegate *pDel1, *pDel2;
  34.     // Bind them to the functions
  35.     pDel1 = new NotifyDelegate(0, &Client1::NotifyFunction1);
  36.     pDel2 = new NotifyDelegate(0, &Client2::NotifyFunction2);
  37.     // Combine the invocation lists of the two delegates
  38.     NotifyDelegate *pDel3 = 
  39.         dynamic_cast<NotifyDelegate*>(Delegate::Combine(pDel1, pDel2));
  40.     // Invoke the multicast delegate
  41.     pDel3->Invoke(3);
  42.     // Create a second multicast delegate
  43.     NotifyDelegate *pDel4 = 
  44.         dynamic_cast<NotifyDelegate*>(Delegate::Combine(pDel3, pDel3));
  45.     
  46.     // Invoke the multicast delegate
  47.     Console::WriteLine();
  48.     Console::WriteLine("Second delegate");
  49.     pDel4->Invoke(3);
  50.     // Remove an item
  51.     NotifyDelegate *pDel5 = 
  52.         dynamic_cast<NotifyDelegate*>(Delegate::Remove(pDel3, pDel1));
  53.     // Invoke delegate with functions removed
  54.     Console::WriteLine();
  55.     Console::WriteLine("Delegate with functions removed");
  56.     pDel5->Invoke(3);
  57.     return 0;
  58. }