我对我经常偶然发现的一段代码有疑问.例如
public static event Action<Foo> foo = delegate{ };
Run Code Online (Sandbox Code Playgroud)
我得到了宣言的左侧.但右手方面令人困惑.将事件分配给具有空括号的委托有什么意义?
更新:在现代版本的C#中,建议使用的模式是将其保留为null并使用?.运算符:
event Action<Foo> foo; // leave it as null as the default
// ...
foo?.(new Foo());
Run Code Online (Sandbox Code Playgroud)
在旧版本的C#中,此模式的原因可能是event字段的默认值为null.这需要每次想要引发事件时使用空检查 - 调用foo()未初始化的event字段会导致a NullReferenceException.像无操作一样给它一个合理的默认值更方便,这样你就可以直接引发事件而不必使用包装器方法或任何东西.