DFL中的事件订阅(module dfl.event,dfl.control)
一.EventArgs类: 事件参数祖先,传递事件的参数组合,可以进行继承实现更多的参数.
二.Event 模版
1.接受两个模版参数,
2.重载了操作符:
opCatAssign ~ 增加.
opCall 调用
opApply foreach调用
三.例子
---------------------------------------------------------------------
控件本身:
1.声明可以订阅事件
[code]Event!(Control, EventArgs) click; [/code]
2.事件处理函数
[code]
protected void onClick(EventArgs ea)
{
click(this, ea);
}[/code]
3.处理Window的事件消息,触发事件.
[code]
protected void wndProc(inout Message msg)
{
switch(msg.msg)
{
case WM_LBUTTONUP:
onClick(EventArgs.empty);
}
}[/code]
-------------------------------------------------------------------------------
使用控件过程:
4.发生事件要执行的函数.
[code]
private void bt_click(Object sender, EventArgs ea)
{}[/code]
5.订阅事件.
[code]bt.click ~= &bt_click ;[/code]
四.启示 observer模式的一个好例子.
在D的运行库Phobos中,std.signals 也实现了observer模式.
一.EventArgs类: 事件参数祖先,传递事件的参数组合,可以进行继承实现更多的参数.
二.Event 模版
1.接受两个模版参数,
2.重载了操作符:
opCatAssign ~ 增加.
opCall 调用
opApply foreach调用
三.例子
---------------------------------------------------------------------
控件本身:
1.声明可以订阅事件
[code]Event!(Control, EventArgs) click; [/code]
2.事件处理函数
[code]
protected void onClick(EventArgs ea)
{
click(this, ea);
}[/code]
3.处理Window的事件消息,触发事件.
[code]
protected void wndProc(inout Message msg)
{
switch(msg.msg)
{
case WM_LBUTTONUP:
onClick(EventArgs.empty);
}
}[/code]
-------------------------------------------------------------------------------
使用控件过程:
4.发生事件要执行的函数.
[code]
private void bt_click(Object sender, EventArgs ea)
{}[/code]
5.订阅事件.
[code]bt.click ~= &bt_click ;[/code]
四.启示 observer模式的一个好例子.
在D的运行库Phobos中,std.signals 也实现了observer模式.