关于.NET中委托与事件实现整理

委托与事件是.NET Frame中功能很强大并十分重要的构造.事件,作为组件间的通信方法,已被广泛应用到GUI程序中.
委托相当于函数指针,任何.NET语言都可以创建并使用委托.它是事件机制的基础.
事件类似JAVA中的对于ActionListener等一系列的响应与处理.

--委托 
 定义: __delegate 返回类型 委托名(参数);

 配置调用:
 静态调用 委托名* 委托对象名 = new 委托名(0,&类::静态方法)
 动态调用 委托名* 委托对象名 = new 委托名(类对象名,&类::动态方法)

 这里面的动,静态方法均满足委托定义的返回类型与参数.

 调用:
 委托对象名.invoke(参数);
 //类似Command Pattern

 <实现多播> Delegate::Combine(..,..)
 实际返回类型是Object *,所以均要dynamic_cast<委托名 *>来cast才行
 <减少播项> Delegate::Delete(..,..)
 第一个参数表示从哪个组删除
       第二个参数表示删除哪一个

--事件
步骤:
 1 从事件源开始

     //n个委托 eg: __delegate void EventHandler(void);
 编写事件源类
 //声明n个event
     __event 委托名(eg: EventHandler)* onEvent; //委托变事件

     定义触发函数的事件
     返回类型(由Raise函数内容而定)Raise(参数)
     {
        CALL onEvent(参数);
 }

 2 实现事件接受器类 类似Receiver
 包含事件源的对象src,并实现处理事件的方法void Event(void);
 src->onEvent += new EventHandler(this,&事件接受器类名::Event(void));

 3 _tmain
 new 一个事件源类对象
 new 一个事件接受类对象,并将事件源对象作为参数传入

 //引发事件
 事件源类对象->Raise(参数)

 结构封装的很好.又想到设计模式了~~不过好象没有跟现学到的模式搭上关系,不过有OO和重用的思想就可以了.

posted on 2005-12-14 19:06  Abalone's Zell  阅读(737)  评论(0编辑  收藏  举报

导航