事件发布者是否应该克隆EventArgs中传递的数据以防止订阅者更改数据?

时间:2012-03-21 19:39:25

标签: c# events

我有自定义事件,它有几个不同的订阅者,他们都将使用我的CustomEventArgs中传递的数据,并可能将其更改为自己使用。在这种情况下,什么被认为是防止一个用户污染另一个用户正在使用的数据的最佳做法?发布者是否应创建数据克隆并分别调用每个订阅者的代理?如果要修改数据,订户是否应负责克隆数据?

提前致谢。

1 个答案:

答案 0 :(得分:2)

通常,我建议将EventArgs派生类设为不可变。然后,发布者可以设置单个实例并正常调用所有代理。

订阅者可以根据需要根据此数据创建自己的类。

对此的一个例外是您希望在参数中具有某种形式的Handled属性的情况,在这种情况下,您希望订阅者能够覆盖此值。这种情况下,正确的文档通常足以正确处理此问题。

我很少建议单独拨打用户代表。