根据Microsoft事件命名准则,sender
C#事件处理程序中的参数“即使可能使用更特定的类型,也始终是对象类型”。
这导致许多事件处理代码,例如:
RepeaterItem item = sender as RepeaterItem;
if (item != null) { /* Do some stuff */ }
为什么约定不建议使用更具体的类型声明事件处理程序?
MyType
{
public event MyEventHander MyEvent;
}
...
delegate void MyEventHander(MyType sender, MyEventArgs e);
我想念陷阱吗?
对于后人:我同意的答案一般的情绪,即该公约是在使用对象(并通过传递数据EventArgs
),即使它是可以使用更具体的类型,而在现实世界编程它是按照重要惯例。
编辑:搜索诱饵:RSPEC-3906规则“事件处理程序应具有正确的签名”