[英]What's the purpose of EventArgs as base class in the event pattern?
经典的一般C#事件具有以下参数:
(object sender, EventArgs e)
我可以为e
参数实现一个具有更具体签名的事件,为EventArgs
派生。
现在,像EventArgs
这样的基类的目的是什么? 我的意思是......它是空的。 没有基础/抽象/虚拟属性,也没有字段或其他内容。
为什么基本事件的参数不像下面那样?
(object sender, object eventArgs)
也就是说,为什么所有带有一些已实现和特定的event-args参数的事件都是从EventArgs
而不是从简单object
派生出来的?
上述问题与以下问题相对应。 通用表单中的事件委托是:
delegate void EventHandler<TEventArgs>(object sender, TEventArgs e)
并且对参数e
没有限制。 但我本来期望像where TEventArgs : EventArgs
这样的东西是连贯的......
对象不会排除像int,double等值类型。这将引入装箱和解拳问题 。 在对象上使用基类的选择是强制在整个API中传递强类型对象的选择。
当我看到对象类型的普遍使用时,我倾向于畏缩,因为它有点击败了使用强类型编程语言的全部观点,你可能会在javascript中编程,尽管任何熟悉javascript的人都会知道他们正在努力强类型编程范例 。
编辑:进一步详细说明传递引用类型和值类型的事件模型之间的区别。 当处理事件的代理人改变事件的数据时,许多人在提交事件时经常会这样做,如果传递的数据是值类型,那么您需要开始考虑是否要更改按值传递的副本或原始引用的值类型,当然你希望你改变原来的。 在.NET事件模型中强制传递引用类型是一个非常关键的设计决策。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.