2007-03-07

DFL框架分析(二) 事件订阅

关键字: DFL 事件 订阅 设计模式 观察者
DFL中的事件订阅(module dfl.event,dfl.control)

一.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模式.
评论
sleets 2007-06-29
呵呵,真的很不错

click ~= delegate void( Control sender, EventArgs ea ){
sender.text = "点我就变";
msgBox("Control ");
} ;
oldrev 2007-03-07
整个一 .net 嘛
发表评论

您还没有登录,请登录后发表评论

ideage
搜索本博客
最近加入圈子
存档
最新评论