public class SomeClass : INotifyPropertyChanged
{
public event PropertyChangedEventHandler? PropertyChanged;
}
我正在学习 C# WPF,我不明白“?”是什么意思运算符在这个意义上意味着..这是否意味着 PropertyChanged 事件可以像原始数据类型一样为 null?
C#
event
就像一个属性,因为它在类上定义了用于附加和删除事件处理程序的方法。如果您不指定这些方法,它们将为您生成。
如果你忽略线程安全,你的例子是等价于;
public class SomeClass : INotifyPropertyChanged {
private PropertyChangedEventHandler? m_PropertyChanged;
public event PropertyChangedEventHandler? PropertyChanged{
add
{
m_PropertyChanged = (PropertyChangedEventHandler?)Delegate.Combine(m_PropertyChanged, value);
}
remove
{
m_PropertyChanged = (PropertyChangedEventHandler?)Delegate.Remove(m_PropertyChanged, value);
}
}
}
现在,从一开始就不会有任何注册的事件处理程序,并且因为
Delegate.Combine
和 Delegate.Remove
都返回 Delegate?
。那么支持字段可能应该可以为空。
C# 允许您将事件定义为不可为空,这似乎很奇怪。