最佳答案
根据 Microsoft 事件命名准则,C # 事件处理程序中的 sender
参数“是对象类型的 一直都是,即使可以使用更具体的类型”。
这导致了很多事件处理代码,比如:
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规则“事件处理程序应具有正确的签名”