C#事件会更改发件人状态

时间:2013-05-18 10:24:13

标签: c# events event-handling

修改发件人在事件中的状态(除了是一个可变对象),这被认为是不好的做法吗?

我发现的所有事件示例都非常简单,只执行Console.WriteLine("event!")

之类的操作

简单代码:

public void HandleEvent(object sender, EventArgs args)
{
    ClassA a = (ClassA)sender;

    a.doSomething(this.makeSomething());
}

2 个答案:

答案 0 :(得分:2)

这样的做法并不坏,但你需要小心。 例如,如果从事件处理程序调用dosomething,或者直接调用它是否相关。

或者因为你不能依赖于eventhandler被触发的时候,你是异步的,所以你不能假设在你调用dosomethingelse之前已经执行了dosomething。

E.g dosomething只有当它为1时才应将状态更改为2.如果它不是1或已经需要2个逻辑。

如果你开始消失在那个洞里,可能最好将请求排队做一个dosomething,然后有一个处理当前状态和请求队列的引擎。

因此,请考虑一下如何将dosomething与您调用的任何其他方法相关联。如果它是自包含的,那么如果依赖关系开始激增,你就可以了,而不是糟糕的做法,而不是糟糕的做法。

答案 1 :(得分:1)

我不认为这是不好的做法,只要您不对运行时调用事件处理程序所遵循的顺序进行假设即可。事实上,作为订单not guaranteed,您不应该依赖它来更改对象的状态,包括 sender