事件实例字段成员是否可以为空(假设它没有被强制设置为空)?
Can an event instance field member be null (assuming it is not forcefully set to null)?
假设我将此作为 class:
的成员
public event EventHandler<MyObject> SomeEventThing;
为了避免空引用警告,我必须写:
public event EventHandler<MyObject>? SomeEventThing;
这是否意味着事件字段可能为空,而我一直在玩火?或者这是一个分析器错误?
是的,类似字段的事件绝对可以为空 - 如果事件没有订阅者,则为空。编译器是正确的。生成的事件代码由委托类型的字段支持,该字段的默认值仍然像其他引用类型字段一样为null。
请注意,使用空条件 ?.
运算符,可以很容易地有条件地调用事件处理程序:
SomeEventThing?.Invoke(this, new EventArgs<MyObject>());
假设我将此作为 class:
的成员public event EventHandler<MyObject> SomeEventThing;
为了避免空引用警告,我必须写:
public event EventHandler<MyObject>? SomeEventThing;
这是否意味着事件字段可能为空,而我一直在玩火?或者这是一个分析器错误?
是的,类似字段的事件绝对可以为空 - 如果事件没有订阅者,则为空。编译器是正确的。生成的事件代码由委托类型的字段支持,该字段的默认值仍然像其他引用类型字段一样为null。
请注意,使用空条件 ?.
运算符,可以很容易地有条件地调用事件处理程序:
SomeEventThing?.Invoke(this, new EventArgs<MyObject>());