2009-12-22 65 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,或者當我非常確定我需要靈活性時。否則,我認爲它們很臃腫。