首页 > 解决方案 > 为什么我要使用自动实现而不是封装?

问题描述

private int someInt;

public int GetSomeInt()
{
    return someInt;
}

我什么时候在下面的代码上使用上面的代码?

public int SomeInt { get; set; }

我被告知要始终封装所有变量而不是将它们声明为公共变量,而自动实现似乎就是这样做的。

由于该字段被宣布为公共,这是否会使封装的目的无效?

标签: c#privateencapsulationpublic

解决方案


自动实现只是封装字段的语法糖,除了设置或检索字段值之外不需要其他逻辑。它不会取代封装,它只是为了节省时间和击键。您自己的代码无法访问自动实现的属性的支持字段——可见的只有属性。此属性及其访问器可以具有字段可以具有的任何相同访问修饰符。

具有私有支持字段的更准确的自动实现等效项包含私有设置器:

public int SomeInt { get; private set; }

推荐阅读