【问题标题】:Why would someone use Private get set over a Puplic Variable?为什么有人会使用 Private 来设置公共变量?
【发布时间】:2017-12-23 19:21:22
【问题描述】:

我在 Unity 工作时遇到了一个问题 我在编辑器中隐藏了一个公共变量 这给我带来了一些我报告为错误的问题 因为对我来说它看起来像一个

我是这样做的:

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;
}

我想公开它,因为我想从其他类访问它

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

感谢您抽出宝贵时间阅读这篇文章。 祝你有美好的一天,继续编码

[编辑] 21.7.17:
我还想指出,我自己教编程,所以直到现在我才开始研究。我试图从这个网站www.dotnetperls.com/property 中理解这个例子,这和我现在的例子一样。我不知道这个网站有多好,但我在那里最了解它

【问题讨论】:

  • 我会使用第二个,但将其公开并摆脱该方法,但这可能是我不熟悉的一些奇怪的 Unity 范例。
  • 确实没有理由将字段设为私有属性并通过公共设置方法设置其值。相反,您应该使用公共 getter 和 setter 创建一个属性
  • @JackMiller 我也不确定那个。这个推荐的代码看起来很奇怪。
  • 除此之外,第二个将不起作用,因为该属性正在引用自身。您确定这是支持成员建议使用的确切代码吗?
  • 提议的代码还使 getter 成为私有的(这很不寻常)。

标签: c# get set private public


【解决方案1】:

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

public bool Variable_1 { get; set; }

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

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

【讨论】:

  • public 字段允许任何人将值设置为任何值 public auto 属性也是如此。
  • 如果 C# 6+ 还可以保留初始化值如下:public bool Variable_1 { get; set; } = true;(早期版本需要在构造函数中设置初始值)。
猜你喜欢
  • 2012-11-18
  • 1970-01-01
  • 2010-12-31
  • 2019-03-23
  • 2011-09-10
  • 1970-01-01
  • 1970-01-01
  • 2018-02-05
  • 1970-01-01
相关资源
最近更新 更多