【发布时间】:2011-03-30 08:44:55
【问题描述】:
假设我有一个名为:
void AFun()
{
// body
}
是否可以在调用此函数时设置事件。说,
void AnEvent()
{
//body
}
每当调用AFun() 时,总是会调用AnEvent()。
【问题讨论】:
标签: c# .net events function call
假设我有一个名为:
void AFun()
{
// body
}
是否可以在调用此函数时设置事件。说,
void AnEvent()
{
//body
}
每当调用AFun() 时,总是会调用AnEvent()。
【问题讨论】:
标签: c# .net events function call
是的,但间接地,如果您在 AFun 中发出一个事件,并且 AnEvent 将监听该事件,您将实现您想要的。否则你描述的不直接支持
代码示例:
public delegate void EventHandler();
public event EventHandler ev;
public void AFun
{
...do stuff
ev(); //emit
}
//somewhere in the ctor
ev += MyEventHandler;
//finally
void MyEventHandler
{
//handle the event
}
【讨论】:
不像你写的那样。您所描述的称为“面向方面的编程”(AOP),需要编译器支持。
现在,C# 和 .NET 的一些扩展通过将侦听器和事件注入代码中的正确位置来执行 AOP。
题外话:在 JavaScript 中你可以做到这一点。
【讨论】:
简单的方法:
event EventHandler AnEventHappened;
void AFun()
{
OnAnEvent();
}
void AnEvent()
{
}
void OnAnEvent()
{
var tmp = AnEventHappened;
if(tmp != null) tmp(this, EventArgs.Empty);
}
【讨论】:
艰难的路:
使用面向方面的编程(使用诸如 Castle 或 PostSharp 之类的东西)并以这种方式发出事件。
【讨论】: