2009-12-22 52 views
4

是否有benifit使用:getter/setter VS公共变量的好处?

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?

谢谢!

+1

复制此http:// stackoverflow。com/questions/1568091/why-use-getters-and-setters – 2009-12-22 21:51:23

回答

4

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

+0

+1;我对Java的许多仇恨之一! – silentcontributor 2009-12-22 21:42:31

+2

为什么你不能在以后用Java改变它? – 2009-12-22 21:43:08

+1

因为它没有属性的概念:有实例变量和实例方法。所以(假设bean约定),访问'foo'“属性”,你调用'getFoo()'并设置你调用'setFoo(myFoo)'的'foo'属性。 – 2009-12-22 21:55:06

1

这真的取决于一点上,你所使用的语言/框架/工具包 -

不过,也有经常使用涉及版本和API兼容性getter和setter时受益。这可以成为使用它们的一个非常有用的理由,所有这一切都是自己的。

0

作为一个说明,你可以从一个公共变量开始,如果有必要的话,可以在代码中将它转换为一个getter/setter ..取决于你使用的语言。

+0

这样做通常会破坏二进制兼容性,虽然。 – 2009-12-22 21:43:28

0

如果你的财产是完全愚蠢的,并且对班上其他人没有副作用 - 那就尽量把它作为一个公共领域来公开。

它只是在很多情况下,您的物业有副作用,所以你需要控制他们如何设置和访问。

作为一个简单的例子,如果你的公共变量没有被设置为你的构造函数中的东西,会发生什么?你确定这被返回为null?或者你想设置这个变量而不是返回null?这是一个自定义获取器值得的简单示例。

0

吸气剂和吸气剂还可以让您更好地控制该变量可以设置的值。

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

    if(age <= 0) 
     retVal = false; 

    return retVal; 
} 

没有setter,值可能被设置为零,并可能发生不好的事情。

1

这真的不能不知道语言回答。吸气剂和固化剂在大多数语言中的成本更高,但它们为您提供灵活性。在某些语言中,如果不更改调用方中的代码,因为使用语法更改,您无法将公共更改为Getter/Setter。但这不是C#的问题,我主要是这样写的。

吸气剂和吸气剂让你做参数验证。他们让你延迟创建对象直到第一次参考。他们有很多优势,我从一开始就需要这些优势时才使用它们。

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