如果我有 属性,我还需要一个字段吗?

If I have a property do I need a field as well?

所以在自动实现和初始化 属性 之后,我的 属性 还需要一个字段吗?

这看起来干净多了:

class A {
public int X {
        get;set;
    } = 1;
}

比这个:

class A {
    int x = 1;
    public int X {
        get {
            return x;
        }
        set {
            x = value;
        }
    }
}

在这种情况下您不需要支持字段,但是如果您想使用例如 On属性Changed() 来操作 属性,那么您需要有一个支持字段

public int X {
    get {
        return x;
    }
    set {           
        x = value;
        OnPropertyChanged()
    }
}

在第一种情况下,编译器已经提供了一个支持字段——它只是隐含的(并且它被赋予了一个你不能在代码中引用的名称)。请注意,has 是生成代码中的一个支持字段,因为 属性 本身实际上只是一对方法,一些元数据链接它们 - 属性 不向对象添加任何状态。状态 存储在字段中。

写在一行时更清晰 - 我通常将其视为:

class A
{
    public int X { get; set; } = 1;
}