我有两个事件A和b
如果事件A被引发,我需要检查B的事件处理程序。我知道我可以用旗子来做,但到目前为止,我已经在这种情况下用了很多旗子;并且想使用另一种策略
对我来说这听起来像是糟糕的设计。如果A的事件被引发,它应该做一些事情,比如修改一些对象实例的状态。如果事件B被触发,通过检查事件A的状态变化,你应该知道事件B是否被触发。如果我在糟糕的设计方面是错误的,那么请发布更多关于您的解决方案的信息。
的例子:
void eventOfA(EventArgs args)
{
// modify application or whatever state like
myAppContext.ChangeStatus(2);
// or
myWhateverInstance.DoStuff();
}
void eventOfB(EventArgs args)
{
if(myAppContext.Status == 2)
// eventOfA was raised
else
// eventOfA was not raised
// or
if(myWhateverInstance.DidStuff)
// eventOfA was raised
else
// eventOfA was not raised
}
- 也许你应该重新考虑你的事件的语义,并创建另一个。假设你有MyApplicationExit和SaveMyData事件,并且你不需要在应用程序退出后立即保存所有内容,你确实可以在SaveMyData Handler中检查MyApplicationExit之前是否被调用。但是一个更好的选择是创建另一个SaveMyDataOnExit事件,当你退出并且用户想要保存东西时发送这个事件。没有那么多的工作,因为你必须区分每种情况。
- 所有你需要的布尔值是事件?因为如果。net的事件处理不适合你,你也可以考虑为你的自定义事件编写自己的eventandler,定义AddHandler, RemoveHandler和RaiseEvent的含义。所以你可以在事件之间创建任何复杂的关系,比如引发一个事件可以自动地——或者在事件参数上有一个条件——引发另一个事件,或者任何更适合你需要的。