繁体   English   中英

对事件使用对象类型而不是实际类型的原因是什么?

[英]What's the reason of using the Object type instead of an actual type for events?

我说的是事件的通用签名:

Event ( object, args );

那么为何不:

Event ( ImageProcessor, args );

#1是否还会带来性能成本以及不清楚?

因为一个事件可以由许多不同的对象/类型引发,所以在编译时可能不知道该类型。

我认为这是由于历史原因加上避免代码重复的原因。

在.Net 1.0中,没有泛型,因此对于每种可能引发事件的类型,您都必须定义事件处理程序委托。 喜欢:

public delegate void TextBoxEventHandler(TextBox sender, EventArgs e);
public delegate void ComboBoxEventHandler(ComboBox sender, EventArgs e);

因此,与此相反,freamework开发人员创建了一个

public delegate void EventHandler(object sender, EventArgs e);

并使用强制转换/作为运算符。

从.Net 2.0开始,我们有了泛型,因此您可以像这样定义一次

public delegate void EventHandler<TSender, TEventArgs>(TSender sender, TEventArgs e) where TEventArgs: EventArgs;

甚至

public delegate void EventHandler<TSender, TEventArgs>(TSender sender, TEventArgs e);

然后像这样使用。

public event EventHandler<TextBox, string> TextChanged;
public event EventHandler<ComboBox, EventArgs> SomeComboBoxEvent;

但这将破坏为.Net 1.0 / 1.1编写的所有应用程序,因此框架开发人员将其保留了原样。 现在每个人都在使用这些泛型类。

另外我不确定Windows窗体设计器是否可以使用通用EventHandler。 我从来没有尝试过测试。

在我看来,类型化(通用)事件比该标准要好。 因此,请尽可能使用它。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM