【发布时间】:2016-02-25 09:35:16
【问题描述】:
我最近一直在编写类,并使用私有字段和 get/set 方法来访问这些私有字段,一位朋友建议我使用自动实现的属性,因为它可以节省我的编程时间。我想知道这两种方法之间的主要区别是什么,以及自动实现的属性是否在运行时保持“字段”的值是私有的。
比如我朋友说我应该用这个:
public int MyProperty { get; set; }
以前我使用过类似的东西:
private int field;
public void setField(int i)
{
field = i;
}
public int getField()
{
return field;
}
【问题讨论】:
-
(1) 更少的代码 (2) 让外部世界清楚地理解它,你基本上在你的类中有一个数据成员并让外部世界访问它,而不是有两个单独的方法可能相关,也可能不相关。
-
是的,自动属性使用(私有)字段,但它是由编译器生成的。通过反射你可以发现它的名字是
<MyProperty>k__BackingField -
我不同意这个问题是重复的。问题不在于有什么区别,而在于一个优于另一个。
-
@PatrickHofman 链接的问题确实有可以带来好处的答案,所以最终它是重复的。
-
嗯,确实有点。不确定我是否真的将其视为重复的@DavidG
标签: c# oop properties field encapsulation