getter / setter VS public vars的好处?

时间:2009-12-22 21:36:53

标签: setter getter

使用是否有利:

private var _someProp:String;

public function set someProp(value:String):void
{
    _someProp = value;
}
public function get someProp():String
{
    return _someProp;
}

与仅使用:

相反
public var someProp:String;

我意识到使用getter / setter在需要进一步处理或需要通知属性更改的时候会很有用:

public function set someProp(value:String):void
{
    _someProp = value;
    _somePropChanged = true;
    doSomethingElse();
}

但如果你不需要这个,那么有没有理由使用getter / setter而不是使用public var?

谢谢!

6 个答案:

答案 0 :(得分:4)

根据你的语言,你应该更好地选择getter / setter,因为如果事实证明你确实需要它们,你以后就不能介绍它们(我正在看你,Java)。

答案 1 :(得分:1)

这实际上取决于您使用的语言/框架/工具包 -

但是,使用与版本控制和API兼容性相关的getter和setter通常会带来好处。这可能是一个非常有用的理由,可以单独使用它们。

答案 2 :(得分:1)

如果不懂语言,这真的无法回答。在大多数语言中,Getters和Setter的成本更高,但它们会为您带来灵活性。在某些语言中,您无法在不更改调用者中的代码的情况下将公共更改为Getter / Setter,因为使用语法会更改。但这不是C#的问题,我在大多数时候都是这样写的。

Getters和Setters允许您进行参数验证。它们允许您在第一次引用之前延迟对象的创建。它们有很多优点,每当我从一开始就需要其中一个优点时,我就会使用它们。

但是,只有当我需要它们时,或者当我非常确定我需要灵活性时,我才会使用getter和setter。否则我认为它们是臃肿的。

答案 3 :(得分:0)

作为旁注,您可以从公共var开始,如果需要,可以稍后在代码中将其转换为getter / setter ..具体取决于您使用的语言。

答案 4 :(得分:0)

如果你的财产完全愚蠢,并且对班上的其他人没有任何副作用 - 那么无论如何只要将其暴露为公共领域。

只是在很多情况下你的属性有副作用,所以你需要控制它们的设置和访问方式。

作为一个简单的例子,如果您的公共变量未在构造函数中设置为某些内容,会发生什么?你还可以将它作为null返回吗?或者您想将此变量设置为某个而不是返回null?这是一个简单的例子,其中定制的getter是值得的。

答案 5 :(得分:0)

Getters和Setter还可以让您更好地控制变量可以设置的值。

bool setAge(int age){
   bol retVal = true;

   if(age <= 0)
       retVal = false;

   return retVal;
}

如果没有setter,可以将值设置为零,并且可能会发生错误。