javascript中可以实现匿名方法如下:
这样写法不仅结构紧凑,而且实现代码生成也相当方便。
最近注意到C#中有类似的匿名委托同样伟大。
起源如下:
我要在一个窗体中弹出另外一些窗体,而我又不想用单件模式去改造这些弹出窗体,最终用了以下做法:
public
partial
class
frmMain : Form

...
{
private Form fmDynamic;

//MenuItem Click
private void tmfDynamic_Click(object sender, EventArgs e)

...{
if (fmDynamic == null)

...{
fmDynamic = new frmDynamic();
fmDynamic.Show();
fmDynamic.FormClosed += new FormClosedEventHandler(delegate(object s, FormClosedEventArgs ev)

...{
fmDynamic = null;
});
}
else

...{
fmDynamic.Focus();
}
}
}
/**/
/* 整理自 2007.09.XX 技术点应用记录 */
obj.onclick
=
function
(){
..
}
..
}
这样写法不仅结构紧凑,而且实现代码生成也相当方便。
最近注意到C#中有类似的匿名委托同样伟大。
起源如下:
我要在一个窗体中弹出另外一些窗体,而我又不想用单件模式去改造这些弹出窗体,最终用了以下做法:



























这种单件窗体的实现关键在于,弹出窗体在关闭时要通知Opener更新,也就是为其注册关闭事件的委托。
本来注册委托普通的写法是fmDynamic.FormClosed += new FormClosedEventHandler(委托名);而匿名委托
的写法是将委托名换成了其所指向的方法体。
这很好理解,委托就是指向方法的指针,所以可以使得方法作为参数被其他方法调用。但是为什么方法体也可以被作为参数呢?可以这样理解:int.Parse("3"); 和 string sValue="3";int.Parse(sValue); 逻辑和执行效果上等价的。把方法体作为参数就类似于传"3"这种直接参数;把委托名作为参数就类似于把sValue这种间接引用作为参数。
匿名委托的好处在为动态生成的控件注册事件时更显而易见:为窗体动态添加方法要付出多大的代价?现在好了,可以在生成控件的方法中直接注册。另外也可以很方便地引用局部变量,使得代码结构紧凑。

