有时我看到用readonly成员定义的类是这样的:
class Foo
{
private readonly string bar;
public Foo(string bar)
{
this.bar = bar;
}
public string Bar => bar;
}
有时我看到用readonly成员定义的类是这样的:
class Foo
{
public Foo(string bar)
{
Bar = bar;
}
public string Bar { get; private set; }
}
第二个例子看起来更具可读性/简洁性,但我想知道是否有任何合理的理由明确定义readonly
支持字段(根据第一个例子)?
赞成对这两个例子进行深入分析,理想情况是在CLR中涵盖真正发生的事情。
答案 0 :(得分:9)
第一种是简短的写作方式
class Foo
{
private readonly string bar;
public Foo(string bar)
{
this.bar = bar;
}
public string get_Bar() { return this.bar; }
}
这是一个有吸气剂的财产;这只是编写getter函数的一种简短方法。
第二种是写作的简短方法
class Foo
{
private string __bar;
public Foo(string bar)
{
this.set_Bar(bar);
}
public string get_Bar() { return this.__bar; }
private void set_Bar(string b) { this.__bar = b; }
}
同样,属性只是幕后的一对get / set方法。
我想知道是否有任何合理的理由明确定义只读备用字段
任何一种形式都是完全合法的。选择你喜欢的那个。
我注意到这两种形式并不相同。在第一种情况下,属性的支持字段只能在构造函数中更改;在后者中,属性的支持字段可以在类中的任何位置更改。