“?”是什么意思? PropertyChanged 语句中的运算符意味着?

问题描述 投票:0回答:1
public class SomeClass : INotifyPropertyChanged
    {
        public event PropertyChangedEventHandler? PropertyChanged;

    }

我正在学习 C# WPF,我不明白“?”是什么意思运算符在这个意义上意味着..这是否意味着 PropertyChanged 事件可以像原始数据类型一样为 null?

c# wpf
1个回答
0
投票

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# 允许您将事件定义为不可为空,这似乎很奇怪。

© www.soinside.com 2019 - 2024. All rights reserved.