在事件中修改发送者的状态(除了作为可变对象之外),这被认为是不好的做法吗?
我发现的所有事件示例都非常简单,只做类似的事情Console.WriteLine("event!")
简单代码:
public void HandleEvent(object sender, EventArgs args)
{
ClassA a = (ClassA)sender;
a.doSomething(this.makeSomething());
}
在事件中修改发送者的状态(除了作为可变对象之外),这被认为是不好的做法吗?
我发现的所有事件示例都非常简单,只做类似的事情Console.WriteLine("event!")
简单代码:
public void HandleEvent(object sender, EventArgs args)
{
ClassA a = (ClassA)sender;
a.doSomething(this.makeSomething());
}
这不是坏习惯,但你需要小心。例如,如果从事件处理程序或直接调用 dosomething 是否相关。
或者因为你不能依赖事件处理程序何时被触发,所以你是异步的,所以你不能假设在你调用 dosomethingelse 之前已经执行了 dosomething。
例如,只有当它为 1 时,dsomething 才应将状态更改为 2。如果它不是 1 或已经 2,则需要更多逻辑。
如果您开始消失在那个洞中,最好将请求排队以做某事,然后拥有一个处理当前状态和请求队列的引擎。
因此,请考虑一下对 a 执行的操作与您在 a 上调用的任何其他方法之间的关系。如果它是自包含的,那你没问题,如果依赖关系开始激增,那么这是一个坏主意,而不是一个不好的做法。
我不会认为这是不好的做法,只要您不对运行时所遵循的顺序做出假设,以调用在您的事件中注册的事件处理程序。事实上,由于不能保证该顺序,您不应该依赖它来更改对象的状态,包括发送者的状态。