2013-05-18 49 views
0

修改事件中的发件人状态(除了是可变对象外),这是否被认为是不好的做法?C#事件更改发件人状态

所有的事件的例子,我发现非常简单,只有这样做Console.WriteLine("event!")

简单代码:

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

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

我认为在很多情况下都可以。想象一下,事件就像“我准备好了更多的数据!”。你会期望改变这种事件的来电者。 –

回答

2

这不是坏习惯,你需要小心。 例如,如果从事件处理程序调用dosomething,或者直接调用dosomething,那么它是相关的。

或者因为当事件处理程序被触发时你不能依赖,所以你是异步的,所以在你调用dosomethingelse之前,你不能假定dosomething已经被执行。

如果它不是1或已经有2个逻辑需要,那么它应该将状态更改为2。

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

因此,请思考如何将dosomething与任何其他方法相关联。如果它是自包含的,那么如果依赖关系开始扩散,那么你就没问题,而不是糟糕的做法,而不是糟糕的做法。

1

我不认为这是不好的做法,只要你不把假设关于运行时的顺序,以便调用注册到事件的事件处理程序。实际上,作为订单not guaranteed,您不应该依赖它来更改您的对象的状态,包括发件人之一。