C#内置事件

Mu'*_*yem 2 c# delegates

阅读下面的代码后:

[SerializableAttribute]
public delegate void EventHandler<TEventArgs>
(
   object sender,
   TEventArgs e
)
Run Code Online (Sandbox Code Playgroud)

为什么微软的人不像发送者参数那样为"e"参数提供对象类型?我错过了一些重要的东西吗?

Mar*_*ell 7

如果他们这样做了,人们就会经常不得不施放args参数.关键是你可以做以下事情:

public event EventHandler<SomeInterestingEventArgs> SomeEvent;
Run Code Online (Sandbox Code Playgroud)

和:

obj.SomeEvent += (sender, args) => Console.WriteLine(args.SomeSpecificProperty);
Run Code Online (Sandbox Code Playgroud)

这是替换声明需求的便捷方式:

public delegate void SomeInterestingEventHandler(
    object sender, SomeInterestingEventArgs args);
Run Code Online (Sandbox Code Playgroud)

没有这个你就不得不这样做.