[英]What is the actual reason why XAML controls are using 'Visibility' type instead of plain 'bool'?
[英]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.