对事件使用对象类型而不是实际类型的原因是什么?
问题描述:
我谈论事件共同特征:对事件使用对象类型而不是实际类型的原因是什么?
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窗体设计器可以hadle泛型EventHandler。我从来没有试过去测试它。
在我看来,键入(通用)事件比这个标准更好。所以尽可能地使用它。
答
因为一个事件可以由多个不同的对象/类型引发,所以在编译时可能不知道类型。
谢谢乔尔。你是指不同类型使用的相同事件?我以为他们会有自己的独立事件? – 2009-06-10 21:41:32
主要是,相同的委托类型“事件”可以反复重复使用。你也可以在任何地方举办一个类型的公共活动,通过任何发件人,但这不太常见。 – 2009-06-10 21:46:29