在没有外部委托定义的情况下定义C#事件

kni*_*ttl 15 c# events delegates

只是出于好奇:是否可以在C#中定义事件而无需定义委托类型?

就像是 public event (delegate void(int)) EventName

Mar*_*k H 18

内置了泛型委托类型,Action<>并且Func<>Action返回void.每个泛型类型参数是要传递给委托的参数的类型类型.例如

public event Action<int> EventName;
Run Code Online (Sandbox Code Playgroud)

此外,还有一个通用EventHandler<T>符合传递Object sender和使用EventArgs类型的约定.


Mor*_*gil 5

不,这是不可能的;ECMA-334 § 17.7 规定:

事件声明的类型应为委托类型(第 11.2 节)

和 § 11.2 定义:

delegate-type:
    type-name
Run Code Online (Sandbox Code Playgroud)

但是,从 C# 3 开始,您可以使用各种预定义的泛型类型,例如Action<int>,您几乎不必定义自己的委托类型。