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