2011-05-04 88 views
5

我有一些接口和類實現該接口:C#如何設置自動屬性的默認值?

public interface IWhatever { 
    bool Value { get; set;} 
} 

public class Whatever : IWhatever { 
    public bool Value { get; set; } 
} 

現在,確實C#允許Value有一些默認值,而無需使用一些支持字段?

+1

你的意思是,你可以如指定默認在這個例子中,讓Value默認爲True? – tomasmcguinness 2011-05-04 15:37:43

回答

13

更新

作爲C#6(VS2015)此語法是完全有效的

public bool Value { get; set; } = true; 

作爲爲只讀屬性

public bool Value { get; } = true; 

舊設定的值,前C#6回答

對於那些可激發性質的劇透:下面的代碼將無法正常工作

你是在問:「我能做到這一點?」

public bool Value { get; set; } = true; 

不,你不能。您需要在類的構造函數中設置默認值

+3

當我第一次看到代碼示例時,我以爲「沒辦法!你可以做到這一點?!「 – 2011-05-04 15:40:29

+2

這真的很棒,如果這實際上工作:3 – 2011-05-04 16:00:03

+3

我的投票,這非常有成效的功能! – 2012-01-30 13:41:21

2

如果沒有什麼背後,它默認爲false,根據文檔。

但是,如果你想讓它有一個初始值以外false被實例化,你能做到這一點是這樣的:

public interface IWhatever 
{ 
    bool Value { get; set;} 
} 

public class Whatever : IWhatever 
{ 
    public bool Value { get; set; } 

    public Whatever() 
    { 
     Value = true; 
    } 
} 
+0

我的意思一樣,例如將其設置爲TRUE;。 – 2011-05-04 15:37:00

+0

@Yippie不,C#不允許你這樣做。如果你想讓它有一個沒有後臺字段的初始值,你需要在構造函數中設置它。 – 2011-05-04 15:43:05

0

默認情況下Valuefalse但它可以在初始化構造函數。

0

您不能將Value設置爲除屬性上數據類型本身的默認值之外的任何其他缺省值。您需要在Whatever的構造函數中指定默認值。

1

的默認值現在是false。要使其成爲true,請將其設置在構造函數中。

public class Whatever : IWhatever 
{ 
    public bool Value { get; set; } 
    public Whatever() 
    { 
     this.Value = true; 
    } 
} 
0

您可以在構造函數中設置默認值。

//constructor 
public Whatever() 
{ 
    Value = true; 
} 

public bool Value { get; set; } 

順便說一句 - 有自動屬性,你仍然有支持字段,它只是被編譯器(syntactic sugar)爲您生成。