2013-07-11 29 views
1

我可以在C#中通過自動屬性封裝私人字段嗎?當我使用C#屬性,我當然可以封裝私人領域。C#自動屬性來包裝私人領域?

private string owner; 
public string Owner 
{ 
    get { return owner; } 
    set { owner=value;} 
} 

當我使用自動屬性會發生什麼?

public string Owner { get; set; } 

這樣我只與屬性本身進行交互,對吧?有沒有辦法使用自動屬性來封裝私人領域?它是如何工作的?

+0

你的目標是什麼? –

+0

如果你想減少打字然後創建私人字段,然後按'ctrl + r'和'ctrl + e' –

回答

1

有什麼辦法可以使用自動屬性來封裝私人領域?

是的;那就是究竟是什麼是自動實現的屬性。簡單地說:編譯器爲你聲明瞭該字段 - 你永遠不會直接看到該字段。也許這裏的真正問題應該是:

如果我使用自動實現的屬性,我可以直接訪問底層字段嗎?

答案是:no;只需訪問該屬性。在JIT內聯後,無論如何你永遠都不會知道的區別

+0

如果該成員是結構類型,或者如果代碼需要將它作爲'ref'參數傳遞給任何東西,差異可能很大。 – supercat

0

不,有沒有辦法做到這一點,你要求。

自動屬性定義了一個字段,但它在編譯時被隱藏並創建。

如果問題是一個打字和你使用的Visual Studio

只需鍵入內主編propfull並就TAB雙擊,的Visual Studio會自動創建一個屬性,字段encapsulatd在裏面用你指定的名字。

0

專用字段是在編譯時創建的,具有唯一的名稱,它在幕後使用。自動屬性被實現,以便您的類型接口不會改變,例如,在setter上添加驗證。在你的班級你應該參考公共財產。通過這種方式,當您將驗證添加到設置器時,您的類將不具有通過驗證過程的特殊權限(如果將實施驗證過程)。

0

C#中的默認屬性使用public getter和setter編譯爲私有字段。

public string Name{get;set;} 

編譯成這樣:

private string name 
public string Name 
{ 
    get 
    { 
     return name; 
    } 
    set 
    { 
     name = value; 
    } 
} 

(實際上它不,變量名是不同的,它使用的訪問/存取器,但本質上它們是同一個東西)

0

有一個值是否被暴露在一個對象被呈現給外界,這取決於方式的差異:

public string Owner { get; set; } 

這是一個屬性,或

public string Owner; 

其是一個領域。

如果您有一個私有變量,則不需要自動屬性,因爲如果它是您的類中的字段或屬性,對它無關緊要。

private string myPrivateValue; 

    public string myPrivateValueAsProperty { 
     get { return myPrivateValue; } 
     set { myPrivateValue = value; } 
    } 
0

兩個小塊的你給的代碼是什麼,但同樣的,將有你的情況相同的效果:如果你以後想對外揭露它,當你開始有類似的代碼這是。然而,使用本地私有屬性或者使用後臺字段調用它的屬性可以用來給出默認值。

private string owner = "I am the Owner"; 
public string Owner 
{ 
    get { return owner; } 
    set { owner=value;} 
} 

此外,如果要在內部進行任何驗證,則會使用後備字段。

private string owner = "I am the Owner"; 
public string Owner 
{ 
    get { return owner; } 
    set 
    { 
     if(!string.IsNullOrEmpty(value)) 
       owner=value; 
    } 
} 

它們也用於通知屬性有時。

private string owner = "I am the Owner"; 
public string Owner 
{ 
    get { return owner; } 
    set 
    { 
     owner=value; 
     NotifyPropertyChanges("Owner"); 
    } 
} 

希望它有幫助。