为什么有人会使用 Private get set 而不是 Public Variable?

Why would someone use Private get set over a Puplic Variable?

我在 Unity 工作时遇到了一个问题 我在编辑器中隐藏了一个 public 变量 这给我带来了一些问题,我将其报告为 Bug 因为对我来说它看起来像一个

我是这样做的:

public bool Variable_1 = true;

Unity 支持成员对我说,我的代码没有任何问题,但我应该这样做,因为这是首选:

private bool Variable_1{
    get
    {
        return this.Variable_1;
    }
    set
    {
        this.Variable_1 = value;
    }

}
public void Set_Variable_1(bool bool){
    this.Variable_1 = bool;
}

我想制作它 public 因为我想从另一个 class

访问它

所以我的问题是为什么有些人会使用第二个示例代码而不是第一个示例代码。这样做的好处是什么? 因为在我看来,第一个例子要简单得多,行数也更少 [编辑] 21.7.17:我知道 getter 和 setter 方法更加灵活,但在这种情况下不需要。

感谢您花时间阅读本文 Post。 祝你有愉快的一天并继续编码

[编辑] 21.7.17:
我还想指出,我自己教过编程,所以直到现在我才开始研究 set and get 。我试图从这个站点 www.dotnetperls.com/property 中理解示例,它与我现在的示例大致相同。我不知道这个网站有多好,但我在那里最了解它

确实没有理由将该字段设为私有 属性 并通过 public setter 方法设置其值。相反,您应该创建一个带有 public getter 和 setter.

的 属性
public bool Variable_1 { get; set; }

除此之外,您的两个解决方案 none 是一个好主意,public 字段允许 任何人 将值设置为 any 值,因此无法对新值执行任何验证。这当然也适用于像上面这样的自动实现的 属性 。但是,如果您决定花点时间 实施一些验证,任何现有的客户端代码都不会受到影响,因为 public API 保持不变。在另一侧使用 public 字段执行此操作将是一个重大更改,因为您将字段替换为 属性。

然而,第二个过于复杂,没有任何优势。