2010-06-18 16 views
12

Czy można ustawić wartość domyślną bez treści obiektu? Najlepiej z adnotacjami.Ustaw domyślną wartość właściwości

[SetTheDefaultValueTo(true)] 
public bool IsTrue { get; set; } 

[SetTheDefaultValueTo(false)] 
public bool IsFalse { get; set; } 

public void Something() 
{ 
    var isTrue = this.IsTrue; 
    var isFalse = this.IsFalse; 
} 

Odpowiedz

18

Nie, nie ma wbudowanego w możliwość ustawienia wartości nieruchomości z metadanymi. Możesz użyć jakiejś fabryki, która zbuduje instancje klasy z refleksją, a następnie ustawi wartości domyślne. Ale w skrócie, musisz użyć konstruktorów (lub selektorów pól ..., które są podnoszone do konstruktora). Aby ustawić wartości domyślne.

Jeśli masz kilka przeciążeń dla swojego konduktora, możesz spojrzeć na constructor chaining.

Korzystanie z C# 6+ jesteś w stanie zrobić coś takiego ...

public string MyValue { get; set; } = "My Default"; 

Och, to dostaje więcej zabawy, bo ludzie jeszcze o coś takiego ...

public string MyValue { 
    private string _myValue; 
    get { return _myValue ?? "My Default"; } 
    set { _myValue = value; } 
} 

... Zaletą tego jest to, że możesz kontrolować zakres pola tak, aby był dostępny tylko w kodzie właściwości, abyś nie musiał się martwić o nic innego w twojej klasie, grającego ze stanem bez użycia gettera/settera.

+0

Czy jest miejsce, w którym mogę zagłosować na tę funkcję lub coś w tym stylu? – BrunoLM

+1

Możesz znaleźć coś na stronie connect.microsoft.com. –

+1

eek ... Właśnie znalazłem to na CodeProject. Używa refleksji do ustawienia wartości domyślnych po skonstruowaniu obiektu. http://www.codeproject.com/KB/dotnet/AutoPropsDefaultValues.aspx –

14

Przypisanie domyślnej wartości właściwości w konstruktorze klas.

class MyClass 
{ 
    public MyClass() 
    { 
     IsTrue = true; 
     IsFalse = false; 
    } 

    public bool IsTrue { get; set; } 

    public bool IsFalse { get; set; } 

    [...] 

    public void Something() 
    { 
     var isTrue = this.IsTrue; 
     var isFalse = this.IsFalse; 
    } 

}

+2

to wygląda bardziej jak jego pytanie zamiast odpowiedzi na nią. –

1

W tym bardzo konkretnym przykładzie, to rodzaj można:

public bool IsFalse { get; set; } 
public bool IsTrue 
{ 
    get { return !IsFalse; } 
    set { IsFalse = !value; } 
} 

public void Something() 
{ 
    var isTrue = this.IsTrue; 
    var isFalse = this.IsFalse; 
} 

Ale w ogóle, no.

2

Stary wątek. Wygląda Microsoft usłyszał i ta funkcja jest dostępna w .NET Framework 4.6+ (C# 6+) Można go używać jak

public string MyValue { get; set; } = "My Default"; 
3

Jeśli używasz C# 5 i wcześniej, trzeba to zrobić w Konstruktor.

ale od C# 6.0, możliwość posiadania własności inicjatorów auto jest włączone, a składnia jest następująca:

public int myage { get; set; } = 33; 
Powiązane problemy