我正在使用事件作为游戏模型的一部分,出于可扩展性和代码“局部性”的考虑,我需要能够否决大多数操作。
更明确地说,几乎每个具有副作用的方法都采用以下形式:
public event TryingToDoSomethingHandler TryingToDoSomething;
public event SomethingHappenedHandler SomethingHappened;
/*
* Returning true indicates Something happened successfully.
*/
public bool DoSomething(...)
{
//Need a way to indicate "veto" here
TryingToDoSomething(...);
//Actual do it
SomethingHappened(...);
return true;
}
我希望通过TryingToDoSomething(...)方法,可以通过返回false、修改输出参数或其他方式来指示已注册的事件处理程序对象。这样,代码在道德上等同于:
/*
* Returning true indicates Something happened successfully.
*/
public bool DoSomethingImproved(...)
{
//Pretty sure multicast delegates don't work this way, but you get the idea
if(!TryingToDoSomething(...)) return false;
//Actual do it
SomethingHappened(...);
return true;
}
在C#/.NET中,是否有一种被认可或标准的方法来实现这个功能?