为什么.NET事件的发送者参数类型为object而不是T类型?

Emb*_*rja 3 .net c# generics event-handling

可能重复:
在C#事件处理程序中,为什么"sender"参数必须是对象?
.NET中的事件签名 - 使用强类型"发件人"?

为什么.NET中的所有事件都有类型的第一个参数object,而不是泛型类型T?每次我必须得到我的发件人,我必须将它转换为更多派生类型.例如:

(Button)sender
Run Code Online (Sandbox Code Playgroud)

Cod*_*ray 8

因为事件处理程序方法的通用签名是在将泛型添加到语言之前很久就发明的.

使用System.Object是仿制药之前几天的合理选择,因为它确实是最"通用"的对象.所有其他对象最终都来自System.Object,包括控件,BCL类和用户定义的类,因为它位于类型层次结构的根.