Rya*_*hel 7 c# events delegates
我正在阅读这个页面,我注意到它是如何说这是标准指南:
.NET Framework准则指出用于事件的委托类型应该采用两个参数,一个"对象源"参数指示事件的来源,一个"e"参数封装有关该事件的任何其他信息.
我可以理解object sender在某些情况下如何使用它有用,但我可以在其他情况下看到完全相反的情况.例如,
如果处理该事件的一个班级不应该知道是谁解雇了该怎么办?耦合,凝聚力以及所有这些.
在我的例子中,我已经将对象引用为成员变量.这就是我订阅活动的方式.它只会有一个实例,因此没有理由转换发送者对象而不是仅仅使用成员变量.
在我的程序中,发件人对象根本不应该为客户端所知.很难解释我在做什么,但基本上我在一个库中有一个内部构造函数的类,该库也被该库中的另外两个类使用.我的客户端类正在订阅来自这两个类的事件,但事件最初是从客户端不应该知道的内部类调用的.
这对事件处理程序的客户来说很困惑.库应该易于理解,在我的情况下,没有理由使用sender变量.没有.那为什么要包括它呢?
话虽如此,为什么微软表示事件处理程序应遵循这些指导原则?难道不总是最好的选择吗?
编辑:感谢大家的回复.我决定与大多数人一起使用,并EventHandler<T>用于我在这个库中的所有活动.
我认为这种模式的原因是为了强制执行某种一致性。sender 参数允许为多个发布者(按钮、表格)重复使用单个处理程序。
为了解决你的观点:
1)根本不使用它。这是很常见的,并且不会真正损害任何好的实践。
2) 没关系,再次忽略发件人
3)与你在2)下所说的完全矛盾......
其余的与1)相同。您甚至可以考虑null作为发件人传递。
4)“那为什么要包含它”-还有其他用例确实需要发送者。
但请注意,这只是图书馆确认 BCL 的指南。
您的案例听起来更像是一个特定的应用程序(而不是一个库),因此请随意使用您喜欢的任何参数方案。编译器不会抱怨。