2013-04-04 97 views
1

我是否應該直接從其他類中獲取變量(int number = something.number;)還是應該使用函數獲取該數字(如下例所示)?有什麼不同?創建獲取變量值的函數

class someclass 
{ 
    private int number; 
    public float GetSomething() 
    { 
     return number; 
    } 
} 
class otherclass 
{ 
    someclass something; 
    private void somefunction() 
    { 
     int number = something.GetSomething(); 
    } 
} 
+0

我認爲[property](http://msdn.microsoft.com/en-us/library/x9fsa0sw.aspx)是一種更好的方法 – 2013-04-04 14:26:01

+0

這是一個非常常見的問題。這個主題有很多在線資源。 – Servy 2013-04-04 14:43:18

+0

@Servy我不認爲它是重複的;另一個問題是關於屬性與領域;這個問題是關於字段與方法。但是,我同意搜索這個問題的答案很容易。 – feralin 2013-04-04 16:16:17

回答

2

使用場參考getter方法之間的區別是,如果你創建一個您期望「客戶端代碼」使用的方法,然後您可以隨時更改方法代碼並且客戶端不必更改其代碼即可。如果您使用字段,那麼如果您決定要在該方法中進行驗證,則客戶端必須將使用該字段的代碼更新爲使用方法。因此,總之,最好使用吸氣劑方法未來驗證。然而,如C#語言,你也可以使用性能,這行爲等的方法樣子領域,所以你可以有兩全其美的:漂亮的語法(場),以及面向未來的(方法)。

1

直接訪問到一個類中的一個變量外面是不是一個很好的做法,因此,強烈建議使用methods(還包括properties)。 當沒有對類變量的直接訪問時,其他類可以使用它,並且每當更改類的內部結構時,都可以用較少的努力來完成。考慮一下類:

class someclass 
{ 
    // it's a field 
    private int number; 

    // it's a property 
    public int Number 
    { 
     get{return this.number;} 
    } 

    //or you can use method 
} 

編輯:如果你發現這是更好地改變number的類型int?一段時間後,你可以因爲從來沒有外面的類人使用number所以乾脆去做了,你可以更改數量,改變你的財產這樣

class someclass 
{ 
    private int? number; 

    public int Number 
    { 
     get{return this.number.Value;} 
    } 

    //or you can use method 
} 
+0

請解釋爲什麼這是不好的做法,如果你可以:)。 – 2013-04-04 14:25:00

1

該類型的數據,你最好使用一個屬性:

class someclass 
{ 
    private int number; 

    public int Number 
    { 
     get {return number;} 
     set {number = value;} 
    } 
} 

那麼你可以使用someclass.Number其他地方

0

揭露領域是不好的做法,因爲它那麼廣泛比暴露方法或財產。例如,您想要根據其他字段值更改此字段的計算邏輯。這兩種方法都是可行的,但如果你使用方法或屬性,實現起來會更容易和更清晰。