Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#事件更改发送方状态_C#_Events_Event Handling - Fatal编程技术网

C#事件更改发送方状态

C#事件更改发送方状态,c#,events,event-handling,C#,Events,Event Handling,在事件中修改发送者的状态(除了作为可变对象之外),这被认为是错误的做法吗 我发现的所有事件示例都非常简单,只执行类似于Console.WriteLine(“事件!”) 简单代码: public void HandleEvent(object sender, EventArgs args) { ClassA a = (ClassA)sender; a.doSomething(this.makeSomething()); } 我不认为这是不好的做法,只要你不假设运行时间后调用的事

在事件中修改发送者的状态(除了作为可变对象之外),这被认为是错误的做法吗

我发现的所有事件示例都非常简单,只执行类似于
Console.WriteLine(“事件!”)

简单代码:

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

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

我不认为这是不好的做法,只要你不假设运行时间后调用的事件处理程序注册到你的事件的顺序。事实上,作为这个顺序,您不应该依赖于改变对象的状态,包括发送者的状态。

< P>我不认为这是不好的实践,只要您不假设运行库后面的顺序来调用注册在事件中的事件处理程序。事实上,按照这样的顺序,您不应该依靠它来更改对象的状态,包括发送方对象。

但这样做并不坏,您需要小心。 例如,如果从eventhandler调用dosomething,或者直接调用dosomething,是否相关

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

例如,只有当dosomething为1时,它的状态才应更改为2。如果不是1或已经是2,则需要更多的逻辑

如果您开始消失在这个洞中,那么最好将一个请求排队以进行剂量测量,然后使用一个处理当前状态和请求队列的引擎


所以想一想a的dosomething如何与你调用a的任何其他方法相关联。如果它是自包含的,那么您就可以了,如果依赖关系开始扩散,那么这是一个坏主意,而不是一个坏做法。

这本身不是一个坏做法,但是您需要小心。 例如,如果从eventhandler调用dosomething,或者直接调用dosomething,是否相关

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

例如,只有当dosomething为1时,它的状态才应更改为2。如果不是1或已经是2,则需要更多的逻辑

如果您开始消失在这个洞中,那么最好将一个请求排队以进行剂量测量,然后使用一个处理当前状态和请求队列的引擎


所以想一想a的dosomething如何与你调用a的任何其他方法相关联。如果它是自包含的,那么您就可以了,如果依赖关系开始扩散,那么这是一个坏主意,而不是一个坏做法。

我认为在许多情况下它是可以的。想象一下,该事件类似于“我准备好获取更多数据了!”。你可能会期望在这样的事件中改变调用者。我认为在很多情况下这是可以的。想象一下,该事件类似于“我准备好获取更多数据了!”。您可能会期望在类似事件中对调用方进行变异。