2013-10-14 45 views
4

在C#和它的近親語言中,我們總是用使用{set; get;}而不是{get;設置;}

public string SomeString { get; set;} 

但你也可以使用(我發現了這一點,最近才和同時與編譯器打打鬧鬧)

public string SomeString { set; get; } 

我做沒有任何正式的編程訓練,一切都是自我思考。我一直在使用{ get; set; },沒有任何想法,就像我們一樣1 + 1 = 2{ get; set; }的順序只是一個慣例,還是有必要保持這個順序,還是像C歷史的那個時代的剩餘部分一樣,就像我們定義傳統電流從當它實際上是另一種方式時,對負端的積極?

+0

修復你的第二個代碼示例;你跳過了變量名稱。 – Dariusz

+2

@Dariusz編輯問題不是更容易,而不是發表請求OP編輯它的評論嗎? –

+3

@DavidArno社區在編輯問題代碼時會皺眉。搜索元。雖然這是一個相當明顯的例子,但我不是101%肯定這不是一個錯誤。 – Dariusz

回答

4

沒有區別。

這就好像你已經在你的類體中首先實現了getter,並且在它之後實現了setter。該功能仍然會做同樣的:

public String getSomeString() { return someString; } 
public void setSomeString(String value) { someString=value; } 

無論他們是寫在爲了

public void setSomeString(String value) { someString=value; } 
public String getSomeString() { return someString; } 

或者相反。他們不是嗎?

但是,我會建議堅持一個訂單在您的代碼。少熵總是更好:)

8

這純粹是一種約定。它們出現的順序沒有區別。

+0

這與您重載'ToString()'或'GetHashCode()'的順序一致。屬性訪問器只是'get_varname' /'set_varname'方法的快捷方式。 –

+0

小心「只是捷徑」索賠。我無法編寫get_X()方法,然後將其作爲X引用。屬性的概念存在於CLR中,因此X變爲get_X(),其中帶有「我是屬性」元數據。 –

+0

我的歉意。我沒有推斷出這是直接相關的,只是對幕後的洞察力。 –

1

{ get; set; }只是一個快捷方式,所以你不必爲每個你想要公開的領域寫getter和setter。這與您寫作時相同

public string GetSomeString() { } 
public void SetSomeString(string value) { } 

請問您最先寫哪一張?當然不是。

+0

@Dariusz,謝謝。做一些多任務atm :)) – walther

1

就定義參數時約定,你可以使用任何這些:

 public string SomeString { get; set; } 
    public string SomeString2 { set; get; } 

    public string someString2; 

    public string SomeString21 
    { 
     get { return someString2; } 
     set { someString2 = value; } 
    } 

    public string SomeString22 
    { 
     set { someString2 = value; } 
     get { return someString2; } 
    } 

    public string SomeString23 
    { 
     set { someString2 = value; } 
    } 

    public string SomeString24 
    { 
     get { return someString2; } 
    } 
2

沒有區別。

按照C#語言規範http://msdn.microsoft.com/en-us/library/ms228593.aspx,10.7.2訪問器(頁324)

一個屬性的訪問器聲明指定可執行與讀數相關和寫入該屬性 語句。

訪問器聲明:

get-accessor-declaration set-accessor-declaration 
set-accessor-declaration get-accessor-declaration 

如圖所示它指出任一順序具有相同的效果

2

Internally Get and Set are methods這樣

private PropertyType Get() {} 
private Set(value as PropertyType) {} 

由於方法聲明的順序並不重要,同樣的情況在這裏。

MSDN:

get訪問的主體是類似的方法。它必須返回屬性類型的值。


set訪問類似於返回void的方法。它使用一個名爲value的隱式參數,其類型是屬性的類型。