2010-07-26 134 views
6

爲C#公共屬性設置默認值的最簡單/直接的方法是什麼?C#自動屬性 ​​- 設置默認值

//我該如何設置默認值?

public string MyProperty { get; set; } 

請不要認爲我使用的是私有財產&實現get/set方法公共屬性。試圖保持這個簡潔,並不想談論爲什麼這樣更好。謝謝。

+0

http://stackoverflow.com/questions/40730/how-do-you-give-ac-auto-property-a-default-value – devio 2010-07-26 14:15:37

+0

OT的可能重複:我想你指的是私人領域 – Douglas 2010-07-26 14:16:05

+0

我認爲你混淆公共/私人和自動屬性的概念與手動實現的屬性與後臺字段。這些概念是獨立的。 – 2010-07-26 14:27:16

回答

5

設置在構造函數的默認:

this.MyProperty = <DefaultValue>; 
+1

是不是''這個聲明是多餘的? – Jimmy 2010-07-26 15:26:33

+3

是的,但有些人認爲這是很好的編碼習慣。 – sbenderli 2010-07-26 15:44:36

+0

@Jimmy:我認爲在這種情況下使用「this」使它更具可讀性。我總是希望它讀取 = 。如果它只是 = 那麼它打破了這種模式。 – jcollum 2011-02-24 17:10:00

3

請不要認爲我使用的是私有財產

這是設置這種默認的標準方式。你可能不喜歡它,但是甚至自動屬性語法在編譯後會做什麼 - 它會生成一個專用字段並在getter和setter中使用它。

您可以在構造函數中設置該屬性,該屬性將盡可能接近默認值。

+0

沒有參數 - 我只是試圖保持非關鍵代碼的簡潔。 – Alan 2010-07-26 14:36:31

+2

@Alan如果你有多個構造函數,那麼它將不再簡潔,因爲你將不得不開始確保在所有代碼路徑中進行初始化。使用私人支持領域,你可以有一個**簡潔的**地方來初始化該屬性。 – AaronLS 2010-07-26 15:07:50

+2

@AaronLS你可能會好起來的,如果你只是鏈接你的構造函數。 – Alan 2010-07-26 17:43:17

9

只是初始化它在構造函數中:

public class MyClass 
{ 
    public string MyProperty { get; set; } 

    public MyClass() 
    { 
     MyProperty = "default value"; 
    } 
} 

注意,如果你有多個構造函數,你需要確保他們每個人的任何設置屬性或委託給其他構造函數一樣。

+0

另一個屬性或另一個ctor? – 2010-07-26 14:17:29

+0

感謝喬恩,但sbenderli第一次:)。出於某種原因,我錯誤地認爲「默認值」會覆蓋在初始化過程中發送的內容。 – Alan 2010-07-26 14:38:05

+0

@jk:另一個構造函數。衛生署。編輯。 – 2010-07-26 14:44:54

2

不,如果您可以標記屬性來指示默認值,但不能。如果您確實想使用自動屬性,則無法在屬性聲明中設置默認值。

我提出的最簡潔的解決方法是在構造函數中設置默認值。它仍然有點難看。默認值與屬性聲明不在一起,如果你有多個構造函數,這可能會很痛苦,但這仍然是我發現的最好的

2

如果你打算使用自動實現的屬性,唯一的真實選項是在構造函數中初始化屬性值。

1

從C#6.0開始,您可以將默認值分配給自動屬性。

public string MyProperty {get; set; } = "Default Value";