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 路径。
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 路径。