gpt4 book ai didi

oop - OO : Should you access your private variables through properties inside your class?

转载 作者:行者123 更新时间:2023-12-04 22:25:51 24 4
gpt4 key购买 nike

我想知道,什么是好的做法:

 private int value;

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

private int DoSomething()
{
return this.Value + 1;
//OR
return this.value + 1;
}

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

最佳答案

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

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

如果您的方法因直接调用该字段而失败,您要么正确处理它,要么通过更简洁的方法访问它 - 通过您的属性。

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

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

与其他任何事情一样,权衡利弊。使用你自己的常识——标准 war 是一种荒谬的干扰。除非他们为你提供你自己还没有想到的论点,否则不要浪费你的呼吸与他们争吵。如果您有正当的理由选择您选择的任何一条路径,那么这条路径就是正确的——它归结为设计师的特权。

我对优缺点的看法是这样的:

带着属性(property)去:
  • 我可以更改返回该值的方式的实现,而无需重构我的整个类。
  • 我可以延迟加载该值,这意味着如果我从不访问它,它永远不会浪费资源。
  • 我可以在一个地方隐藏如何返回值的所有实现细节,而不必在我的代码中处理它。

  • 与领域同行:
  • 我没有每次访问值时都必须单步执行属性代码的潜在性能开销。
  • 我需要确保在每次调用时都正确初始化该值,或者处理未正确初始化的情况。
  • 即使我的属性可能只为我的值提供只读接口(interface),我也可以影响该值。

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

    但这只是我——你的属性可能是读/写的,你可以从设计的角度决定直接访问该字段是可以的——这也可以。

    诀窍是 做事总是有原因的,不要仅仅因为做事就盲目地做事。

    关于oop - OO : Should you access your private variables through properties inside your class?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2074950/

    24 4 0
    Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
    广告合作:1813099741@qq.com 6ren.com