只读的 getters 和类似属性的函数之间的区别

5
随着C#6的推出,一些新功能也应运而生,其中包括getter-only auto-propertiesproperty-like function members。我想知道这两种属性之间有什么区别?是否有任何理由我更喜欢其中的一种?
public class Foo
{
    public string Bar {get;} = "Bar";
    public string Bar2 => "Bar2";
}

我知道{get;} =只能通过静态调用或常量值设置,而=>可以使用实例成员。但在我的特定情况下,我应该选择哪个并为什么?


1
你关于“我知道 {get;} = 只能通过静态调用设置”这一说法是不正确的。像那样声明的属性只能在构造函数中或通过初始化器设置。 - Jon Skeet
哦,没错。我还没有意识到那些设置只读自动属性的方式会导致相同的结果。谢谢。 - IEatBagels
1个回答

6

最简单的方法是用C# 1来展示它们:

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

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

如您所见,第一个涉及字段,第二个则不涉及。因此,您通常会在每个对象可能具有不同状态的情况下使用第一个,例如在构造函数中设置,但在所有这种类型的对象上都是恒定的,因此不需要任何每个对象状态(或者当然,如果您只是委托给其他成员)。

基本上,如果您没有可用的C#6,则自问上面两个代码片段中哪个是您将要编写的,并选择相应的C#6路径。


网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接