2011-11-28 17 views
23

Dowiedziałem się, że C# 3.0 ma nową funkcję Auto-implementowanych właściwości, podobało mi się, ponieważ nie musimy zadeklarować dodatkowych prywatnych zmiennych w to (w porównaniu do wcześniejszej własności), wcześniej używałem nieruchomości tjJak ustawić domyślną wartość dla Auto-implementowanych właściwości w ASP.NET

private bool isPopup = true; 
public bool IsPopup 
{ 
    get 
    { 
     return isPopup; 
    } 
    set 
    { 
     isPopup = value; 
    } 
} 

teraz już zamieniona Auto realizowanych nieruchomości tj

public bool IsPopup 
{ 
    get; set; 
} 

Chcę ustawić domyślną wartość tego właściwość true bez użycia go nawet w metodzie page_init, próbowałem, ale nie udało mi się, może dowolne jedno wyjaśnić, jak to zrobić?

+3

Zainicjuj go w konstruktorze –

Odpowiedz

39

można zainicjować obiektu domyślnego konstruktora:

public MyClass() 
{ 
    IsPopup = true; 
} 

z C# 6.0 można zainicjować właściwości w deklaracji jak normalnych polach członkowskich:

public bool IsPopup { get; set; } = true; // property initializer 

Jest teraz nawet możliwe jest utworzenie prawdziwej właściwości automatycznej tylko do odczytu, którą można zainicjować bezpośrednio lub w konstruktorze, ale nie można jej ustawić w innych metodach tej klasy.

public bool IsPopup { get; } = true; // read-only property with initializer 
+0

Dzięki, myślę, że to jedyny sposób. –

+0

Szukając bardziej szczegółowych odpowiedzi, do tego muszę napisać dodatkowy kod w konstruktorze, czy nie ma sposobu na zapisanie go w samej właściwości Automatycznie zaimplementowanej, bez użycia starych konwencji. –

+2

W jakiś sposób musisz zainicjować swoją własność.Ponieważ nie ma pola zaplecza (jest ono generowane przez kompilator), nie ma innej opcji. W tych okolicznościach piszę pełne właściwości, na szczęście dostajesz intellisense, aby to zrobić. – slfan

0

Czy próbowałeś DefaultValueAttribute

+0

Nie, ponieważ nigdy nie używam .net 4.0 –

+9

Ok, więc dowiedziałem się, że to nie było poprawne sposób. Wydaje się, że DefaultValueAttribute po prostu instruuje meta danych, że właściwość może mieć wartość domyślną i nie faktycznie go ustawić. Tak więc mam nadzieję to pomaga komuś. –

6

atrybuty określone dla własności auto nie stosuje się do pola podkładu, więc atrybut o wartości domyślnej nie będzie pracować dla tego typu nieruchomości.

Można jednak zainicjować właściwość Auto:

VB.NET

Property FirstName As String = "James" 
Property PartNo As Integer = 44302 
Property Orders As New List(Of Order)(500) 

C# 6.0 i powyżej

public string FirstName { get; set; } = "James"; 
public int PartNo { get; set; } = 44302; 
public List<Order> Orders { get; set; } = new List<Order>(500); 

C# 5.0 i poniżej

Niestety, wersje C# poniżej 6.0 nie obsługują tego, więc musisz zainicjować domyślne wartości dla właściwości automatycznych w konstruktorze.

+1

dzięki za informacje –

+1

Dobra robota Eagle-Eye, dziękuję za aktualizację, która obejmuje C# 6.0. –

0
using System.ComponentModel; 

[DefaultValue(true)] 
public bool IsPopup 
{ 
    get 
    { 
     return isPopup; 
    } 
    set 
    { 
     isPopup = value; 
    } 
} 
+3

czy widziałeś odpowiedź Akshata Jeewana Sharmy? –

+0

Czy to było "Kopiuj i wklej"? –

+2

zobacz odpowiedź @Jeewana Sharmy, aby zrozumieć, że nie jest to właściwa droga. –

0

Można użyć domyślną wartość właściwości jak poniżej

Jedną z zalet tej metody jest pan nie trzeba sprawdzić wartości null dla Boolean typów

using System.ComponentModel; 

public class ClassName 
{ 
    [DefaultValue(true)] 
    public bool IsPopup{ get; set; } 
} 
+2

To faktycznie nie ustawia wartości domyślnej, to tylko wskazuje, jaka powinna być wartość domyślna –

+0

@JoeFlateau możesz wyjaśnić, jaka jest różnica obu metod? B'cos, gdy uzyskuję dostęp do tej właściwości z kontrolera, jej wartość jest prawdziwa. następnie ? – Sampath

+4

Wartość DefaultValue ma wyłącznie charakter informacyjny, a program Visual Studio pokaże wartość jako niepogrubioną. –