OO:您应该通过班级内的属性访问私有变量吗?

Pet*_*rdk 4 oop properties

我在想,有什么好的做法:

 private int value;

 public int Value { get { return this.value; } }

 private int DoSomething()
 {
      return this.Value + 1;
      //OR
      return this.value + 1;
 }
Run Code Online (Sandbox Code Playgroud)

所以,问题是你应该如何对待你的类变量.您应该通过您的酒店访问它们还是直接访问它们?

Ben*_*ter 8

在这种情况下,它并不重要,但在你使用延迟加载变量的情况下,它很重要,你可以通过你的属性访问.例如:

private Myobject _value;

public Myobject Value
{
    get
    {
        if (_value == null) _value = new MyObject();
        return _value;
    }
}

private MyObject DoSomething();
{
    //If you access _value here, it might be null...
    //so you should access it through the property:
    return Value;
}
Run Code Online (Sandbox Code Playgroud)

如果您的方法通过直接调用字段而失败,您可以正确处理它,或者通过清理方法访问它 - 通过您的属性.

这一切都归结为您的应用程序的体系结构,为此您必须提出一个问题:从维护角度来看,最有意义的是什么?

我不得不说,如果该字段已正确初始化并且不会让您头疼直接访问它,那么直接访问它.如果它导致额外的工作(以及额外的维护),那么引用该属性.

和其他任何东西一样,权衡利弊.使用你自己的常识 - 标准战争是一种荒谬的分心.除非他们为你提供你自己没有想过的论据,否则不要浪费你的气息.如果您有正当理由选择您选择的路径,那么该路径是正确的 - 它取决于设计师的特权.

我对利弊的看法是这样的:

与财产一起:

  • 我可以改变返回该值的实现,而无需重构我的整个类.
  • 我可以延迟加载值,这意味着如果我从不访问它,它永远不会浪费资源.
  • 我可以隐藏在单个位置返回值的所有实现细节,而不必在我的代码中处理它.

和田地一起去:

  • 每次访问该值时,我都没有必要逐步执行属性代码的潜在性能开销.
  • 我需要确保在每次调用时正确初始化值,或者处理不适合的情况.
  • 可以影响该值,即使我的属性可能只提供我的值的只读接口.

所以我想我的方法是使用属性,除非我需要直接写入值,在这种情况下,我将使用该字段 - 因为我的属性是只读的,因此无法写入.

这只是我 - 你的财产可能是读/写,你可以从设计的角度决定直接访问该领域是好的 - 这也没关系.

诀窍总是出于某种原因做事,不要盲目做事只是因为.


归档时间:

查看次数:

469 次

最近记录:

15 年,9 月 前