使用C#编写事件时,建议以以下形式创建委托:
delegate XEventHandler(object sender, XEventArgs e);
我的问题是关于代表的第一个论点object sender
。一定要一定要通用object
吗?具有类型的发送方object
总是会导致与此类似的代码。
val = ((ConcreteType)sender).Property;
或者,甚至更冗长,
ConcreteType obj = sender as ConcreteType
if (obj != null) { ... }
反对强类型发送者的一种说法是,其他对象可以转发事件而不必担心类型。尽管这在GUI环境中可能有意义,但是我不确定它是否可以在GUI之外受益。
如果始终知道发送方的类(至少是抽象类)怎么办?例如,如果我实现ListChanged
的一个抽象事件List
类,而如果其他类要继承它(例如LinkedList
,ArrayList
),是这一切的权利界定与类型的发件人我的委托List
?
delegate ListChangedEventHander(List sender, ListChangedEventArgs e);
还是将常规object sender
类型更改为更特定的类型会有不利影响?