更“真实”的是:使用带有或不带有私有字段的属性。IE
1.
class A
{
int _field;
public int Field
{
get{ return _field;}
set{_field = value;}
}
}
2.
class A
{
public int Field{get;private set;}
}
更“真实”的是:使用带有或不带有私有字段的属性。IE
1.
class A
{
int _field;
public int Field
{
get{ return _field;}
set{_field = value;}
}
}
2.
class A
{
public int Field{get;private set;}
}
数字 2 会自动创建一个支持字段,因此您总是有一个“幕后”的私有字段(尽管在后一种情况下不能直接访问)。
当您创建匿名属性时,编译器会为您创建相应的字段,因此几乎相同,但您只能通过属性访问自动创建的字段
using
没有区别 - 编译器为您生成属性实现的方式与生成默认构造函数或语句代码的方式完全相同。这两个类几乎 100% 等效,如果您反编译自动属性,您可以看到(唯一的区别是编译器使用的生成的支持字段的名称)
class A
{
public int Field {get; private set;}
}
class A
{
int _field;
public int Field
{
get { return _field; }
private set {_field = value; }
}
}
这完全取决于您的个人喜好。
如前所述,第二个在编译时创建支持字段。如果您希望属性充当该字段的公共访问器,您通常会自己定义一个支持字段,您可以在其中添加自定义逻辑或防止修改值(使用 setter 上的 private 关键字)。