修改发件人在事件中的状态(除了是一个可变对象),这被认为是不好的做法吗?
我发现的所有事件示例都非常简单,只执行Console.WriteLine("event!")
简单代码:
public void HandleEvent(object sender, EventArgs args)
{
ClassA a = (ClassA)sender;
a.doSomething(this.makeSomething());
}
答案 0 :(得分:2)
这样的做法并不坏,但你需要小心。 例如,如果从事件处理程序调用dosomething,或者直接调用它是否相关。
或者因为你不能依赖于eventhandler被触发的时候,你是异步的,所以你不能假设在你调用dosomethingelse之前已经执行了dosomething。
E.g dosomething只有当它为1时才应将状态更改为2.如果它不是1或已经需要2个逻辑。
如果你开始消失在那个洞里,可能最好将请求排队做一个dosomething,然后有一个处理当前状态和请求队列的引擎。
因此,请考虑一下如何将dosomething与您调用的任何其他方法相关联。如果它是自包含的,那么如果依赖关系开始激增,你就可以了,而不是糟糕的做法,而不是糟糕的做法。
答案 1 :(得分:1)
我不认为这是不好的做法,只要您不对运行时调用事件处理程序所遵循的顺序进行假设即可。事实上,作为订单not guaranteed,您不应该依赖它来更改对象的状态,包括 sender 。