2011-03-16 80 views
5

自動性能添加到語言中有關.NET 3,營造出「私人」領域,反正使用的代碼:訪問自動屬性 ​​- C#

public string foo {get;set;} 

是否有可能真正得到任何形式的參考這個私人領域?

我要像做

public string foo {get{/*some code to check foo for nulls etc*/};set;} 

不失這種自動性質特徵和寫作類似

private string _foo = null; 
public string foo{get{_foo==null?_foo="hello"; return _foo;}set{_foo=value;}} 
+6

這不會使它成爲一個自動屬性,會嗎? – BoltClock 2011-03-16 09:57:25

+1

爲什麼你要在* getter *中添加支票?檢查應該在* setter *中。 – CodesInChaos 2011-03-16 09:59:40

+0

IMO延遲初始化過度使用。如果默認值是檢查構造只是在構造函數中分配它。延遲初始化適用於缺省值構建起來並且不總是使用的屬性。根據我的經驗,這可能是一百個屬性中的一次。 – CodesInChaos 2011-03-16 10:03:10

回答

6

The backing field of an automatic property is anonymous;你不能從它的getter或setter中訪問它。

如果你需要在你的getter或setter中實現你自己的邏輯,那麼你的屬性不會被認爲是自動的了。

汽車性能只是有保存打字看到的枯燥和不順眼,這些衆人:

private object _x; 

public object X 
{ 
    get { return _x; } 
    set { _x = value; } 
} 
3

你不能有一個「自動」獲得和「手冊」集(或「手動」獲得一個「自動」設置)。您必須同時具有「手動」或兩者都是「自動」。