关于.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和重用的思想就可以了.
委托相当于函数指针,任何.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 阅读(738) 评论(0) 编辑 收藏 举报