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

C# 如果我有一个属性,我还需要一个字段吗?,c#,properties,field,C#,Properties,Field,因此,在自动实现和属性初始化可用之后,我甚至需要为我的属性设置一个字段吗 这似乎要干净得多: class A { public int X { get;set; } = 1; } 除此之外: class A { int x = 1; public int X { get { return x; } set { x = value; }

因此,在自动实现和属性初始化可用之后,我甚至需要为我的属性设置一个字段吗

这似乎要干净得多:

class A {
public int X {
        get;set;
    } = 1;
}
除此之外:

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

在这种情况下,您不需要一个支持字段,但如果您想使用OnPropertyChanged()等操作属性,则需要一个支持字段

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

在这种情况下,您不需要一个支持字段,但如果您想使用OnPropertyChanged()等操作属性,则需要一个支持字段

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

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

如果写在一行上,它甚至更干净——我通常认为:

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

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

如果写在一行上,它甚至更干净——我通常认为:

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