用户登录  |  用户注册
首 页商业源码原创产品编程论坛
当前位置:PB创新网文章中心编程技巧Visual C++

编程高手 实例解析C++/CLI之代理与事件

减小字体 增大字体 作者:佚名  来源:本站整理  发布时间:2009-03-16 20:37:47


  例9:

using namespace System;

int main()
{
 Server::Broadcast("Message 1");
 Client^ c1 = gcnew Client("A");
 Server::Broadcast("Message 2");

 Client^ c2 = gcnew Client("B");
 Server::Broadcast("Message 3");

 Client^ c3 = gcnew Client("C");
 Server::Broadcast("Message 4");

 c1->~Client();
 Server::Broadcast("Message 5");

 c2->~Client();
 Server::Broadcast("Message 6");

 c3->~Client();
 Server::Broadcast("Message 7");
}

  例9是主程序,一开始,没有注册任何函数,所以当发送第一个消息时,不会获得任何通知。然而,一旦构造了c1,通知列表就包含了此对象的一个入口,而接下来c2与c3的构造使这个列表增长到3个入口。在这些对象消失时(通过显式调用析构函数),入口数也相应地减少了,直到最后,一个也不剩,因此当最后一条消息发出时,没有任何对象在监听。以下是输出:

Client A received message Message 2
Client A received message Message 3
Client B received message Message 3
Client A received message Message 4
Client B received message Message 4
Client C received message Message 4
Client B received message Message 5
Client C received message Message 5
Client C received message Message 6

  尽管3个对象均为同一类型,但这并不是必须的,只要定义的函数可与NewMsgEventHandler兼容,就能使用任意的类型。

  上述例子中使用的事件只不过是微不足道的一个示例,另外要说明一点,与以前文章中说过的属性一样,此种类型的事件均以private属性自动备份,且自动生成添加(add)与移除(remove)存取程序,为自定义这些存取程序,就必须提供这些函数的定义,如例10中所示,名称add与remove在此为上下文关键字。

  例10:

public ref struct Server
{
 // ...
 static event NewMsgEventHandler^ ProcessNewMsg {
  void add(NewMsgEventHandler^ n) { /* ... */ }
  void remove(NewMsgEventHandler^ n) { /* ... */ }
 }
 // ...
};


上一页  [1] [2] [3] [4] [5] 

Tags:

作者:佚名

文章评论评论内容只代表网友观点,与本站立场无关!

   评论摘要(共 0 条,得分 0 分,平均 0 分) 查看完整评论
PB创新网ourmis.com】Copyright © 2000-2009 . All Rights Reserved .
页面执行时间:31,625.00000 毫秒
Email:ourmis@126.com QQ:2322888 蜀ICP备05006790号