说我有一个名为的函数:
void AFun()
{
// body
}
无论何时调用此函数,都可以设置事件。说,
void AnEvent()
{
//body
}
只要调用AnEvent()
,就会始终调用AFun()
。
答案 0 :(得分:4)
是的,但间接地,如果您在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
}
答案 1 :(得分:1)
简单方法:
event EventHandler AnEventHappened;
void AFun()
{
OnAnEvent();
}
void AnEvent()
{
}
void OnAnEvent()
{
var tmp = AnEventHappened;
if(tmp != null) tmp(this, EventArgs.Empty);
}
答案 2 :(得分:1)
不像你写的那样。您所描述的内容称为“面向方面编程”(AOP),需要编译器支持。
现在,C#和.NET有一些扩展通过将侦听器和事件注入代码中的正确位置来执行AOP。
偏离主题:在JavaScript中,您可以执行此操作。
答案 3 :(得分:0)
艰难的方式:
使用面向方面编程(使用Castle或PostSharp之类的东西)并以这种方式发出事件。