gpt4 book ai didi

c# - 为什么使用偏离 sender 和 eventargs 的事件处理程序方法签名是个坏主意?

转载 作者:太空狗 更新时间:2023-10-29 23:24:27 25 4
gpt4 key购买 nike

VS 2012 中的代码分析工具提示我的代码存在一些问题。大多数都很好,This one (CA1009 正确声明事件处理程序)但是我不明白其中的原因。

如果我不需要任何数据,只是想知道发生了什么事,在我看来,我通过使用带有不需要参数的事件来混淆我的真实意图。

例如,假设我想列出符合给定条件的所有客户。如果我的存储库已更新,我需要重新检查数据。

所以我创建了一个存储库类,然后给它一个具有以下签名的 DataChanged 事件:

public event Action DataChanged;

然后在其中一个使用 repo 的类中我可以做

repository.DataChanged += UpdateMatchingCustomers;

private void UpdateMatchingCustomers() {
MatchingCustomers = ...
}

为什么这是个坏主意?

最佳答案

我认为主要思想是有人可能希望使用相同的事件处理程序方法来处理来自多个源的事件,并且具有匹配的签名是有帮助的:

  • 强制存在 sender 确保处理程序可以区分不同的事件源
  • 让所有事件数据对象都派生自 EventArgs 可确保始终有适当的类型用于数据参数

此外,拥有事件数据的基类并强制执行它可以确保扩展事件源的类可以使用现有事件发送比基类更多的数据,这确保了这是可能的(当然,这有点远-fetched,但我在实际程序中至少做过一次)。

如果某个事件没有按照他们预期的模式进行,微软的一些花哨的设计师(他们当然喜欢他们的设计师)崩溃了,我也不会感到惊讶。

关于c# - 为什么使用偏离 sender 和 eventargs 的事件处理程序方法签名是个坏主意?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14094409/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com