2011-05-04 7 views
5

mam jakiś interfejs i klasa implementująca ten interfejs:C# Jak ustawić wartość domyślną dla właściwości automatycznych?

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

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

Teraz ma C# umożliwić Value mieć jakąś wartość domyślną bez użycia jakiejś dziedzinie podkład?

+1

Czy masz na myśli możliwość określenia wartości domyślnej, np. w tym przykładzie niech wartość domyślna to prawda? – tomasmcguinness

Odpowiedz

13

Aktualizacja

Od C# 6 (VS2015) składnia ta jest całkowicie poprawny

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

jak jest ustawienie wartości dla właściwości tylko do odczytu

public bool Value { get; } = true; 

Stary, pre C# 6 odpowiedź

Spoiler alert dla tych o pobudliwy charakter: Poniższy kod nie zadziała

Pytasz: „Czy mogę to zrobić?”

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

Nie, nie możesz. Musisz ustawić domyślną wartość w konstruktorze klasy

+3

Kiedy po raz pierwszy zobaczyłem próbkę kodu, pomyślałem "Nie ma mowy!Możesz to zrobić ?! " –

+2

Byłoby świetnie, gdyby to zadziałało: 3 –

+3

Mój głos na tę bardzo produktywną funkcję! –

2

Jeśli nie ma za tym nic, domyślnie jest to fałsz, zgodnie z dokumentacją.

Jednakże, jeśli ma to być tworzony z wartości początkowej inny niżfalse, można to zrobić w ten sposób:

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

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

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

Miałem na myśli, na przykład, ustawić go na "true". –

+0

@Yippie Nie, C# nie pozwala na to. Jeśli chcesz mieć wartość początkową bez pola pomocniczego, musisz ustawić ją w konstruktorze. –

0

Domyślnie Value byłoby false ale może być inicjowane w konstruktor.

0

Nie możesz ustawić wartości Value na żadną inną domyślną wartość niż domyślna wartość samego typu danych w tej właściwości. Musisz przypisać wartość domyślną w konstruktorze Whatever.

1

Obecnie domyślną wartością jest false. Aby było to true, ustaw go w konstruktorze.

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

Możesz ustawić domyślną wartość w konstruktorze.

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

public bool Value { get; set; } 

Przy okazji - o właściwościach automatycznych, nadal masz pole oporowe, to po prostu dostaje generowane dla potrzeb przez kompilator (syntactic sugar).