Readonly getters VS 属性-like 函数

Readonly getters VS property-like functions

C#6 带来了一些新功能,包括 getter-only auto-properties and property-like function members

我想知道这两个属性之间有什么区别?有什么理由让我更喜欢一个而不是另一个吗?

public class Foo
{
    public string Bar {get;} = "Bar";
    public string Bar2 => "Bar2";
}

我知道 {get;} = 只能通过 static 调用或常量值设置,并且 => 可以使用实例成员。但在我的特殊情况下,我应该更喜欢哪一个,为什么?

用 C# 1 最容易显示它们:

public class Foo
{
    private readonly string bar = "Bar";
    public string Bar { get { return bar; } }

    public string Bar2 { get { return "Bar2"; } }
}

如您所见,第一个涉及字段,第二个不涉及。因此,您通常会将第一个用于每个对象可能具有不同状态的东西,例如在构造函数中设置,但第二个在 all 这种类型的对象中具有不变的东西,因此不需要任何每个对象的状态(或者你只是委托给其他人的地方当然是会员)。

基本上,问问自己,如果您没有可用的 C#6,您会编写上述哪一段代码,然后选择相应的 C#6 路径。