【问题标题】:What is the advantage of using Properties over private fields and get/set methods?与私有字段和 get/set 方法相比,使用 Properties 有什么优势?
【发布时间】: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


【解决方案1】:

它不仅是一种更好的设计来防止直接访问字段,这是有争议的,而且框架更喜欢属性而不是字段(在某些情况下是方法)。

其中之一是数据绑定。您不能将数据绑定到字段,只能绑定到属性。此外,它还允许您设置访问修饰符以允许读取,但不允许写入例如属性。

属性也比 Java 样式属性更容易编写。最后代码是一样的(因为属性最终会变成方法),但是对于编码员来说,这要容易得多。

【讨论】:

    猜你喜欢
    • 2010-09-16
    • 2019-12-13
    • 1970-01-01
    • 2010-09-24
    • 2010-12-27
    • 2015-04-06
    • 2013-05-09
    • 2017-05-29
    • 2017-11-24
    相关资源
    最近更新 更多