2011-11-28 15 views
23

Sono venuto a sapere che C# 3.0 è dotato di una nuova funzionalità di Proprietà auto-implementate, mi è piaciuto perché non dobbiamo dichiarare varible extra privata in questo (confronta con immobili in precedenza), in precedenza stavo usando un immobile vale a direCome impostare il valore predefinito per le proprietà implementate automaticamente in ASP.NET

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

Ora ho convertito in proprietà Auto-Implemented cioè

public bool IsPopup 
{ 
    get; set; 
} 

voglio impostare il valore predefinito di questo proprietà true senza usarlo nemmeno nel metodo page_init, ho provato ma non ci sono riuscito, può any uno spiega come si fa?

+3

Inizializzalo nel costruttore –

risposta

39

È possibile inizializzare la proprietà nel costruttore di default:

public MyClass() 
{ 
    IsPopup = true; 
} 

Con C# 6.0 è possibile inizializzare la proprietà al di dichiarazione come normali campi membro:

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

Ora è ancora possibile creare una vera proprietà di sola lettura automatica che è possibile inizializzare direttamente o nel costruttore, ma non impostare in altri metodi della classe.

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

Grazie, penso che sia l'unico modo. –

+0

Alla ricerca di risposte più specifiche, per questo devo scrivere codice aggiuntivo nel costruttore, non c'è modo di scriverlo nella proprietà Auto-implementata, senza usare le convenzioni precedenti. –

+2

In qualche modo devi inizializzare la tua proprietà.Dato che non esiste un campo di supporto (è generato dal compilatore), non c'è altra opzione. In queste circostanze scrivo tutte le proprietà, fortunatamente si ottiene l'intelletto per farlo. – slfan

0

Hai provato DefaultValueAttribute

+0

No, come non uso mai .net 4.0 –

+9

Ok, quindi ho scoperto che questo non era il modo corretto. Sembra che DefaultValueAttribute indichi semplicemente ai metadati che una proprietà può avere un valore predefinito e in realtà non lo imposta. Quindi spero questo aiuta qualcuno. –

6

attributi specificati per una proprietà di auto non si applica al settore della protezione, così un attributo per un valore di default non funziona per questo tipo di proprietà.

È possibile, tuttavia, inizializzare una proprietà auto:

VB.NET

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

C# 6.0 e versioni successive

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 e di seguito

Sfortunatamente, le versioni C# inferiori a 6.0 non supportano questo, quindi è necessario inizializzare i valori predefiniti per le proprietà automatiche nel costruttore.

+1

grazie per le informazioni –

+1

Buona modifica Eagle-Eye, grazie per l'aggiornamento di questo per includere C# 6.0. –

0
using System.ComponentModel; 

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

hai visto la risposta di Akshat Jeewan Sharma? –

+0

Era "Copia e incolla"? –

+2

vedi @Jeewan La risposta di Sharma per capire che questo non è il modo giusto per farlo. –

0

È possibile utilizzare valore della proprietà predefinita come qui di seguito

Un vantaggio di questo metodo è che si non è necessario controllare i valori nulli per booleano tipi

using System.ComponentModel; 

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

Che in realtà non imposta il valore predefinito, indica solo quale valore predefinito deve essere –

+0

@JoeFlateau potresti spiegare qual è la differenza tra entrambi i metodi? B'cos quando accedo a quella proprietà dal controller il suo valore è true.Così poi ? – Sampath

+4

DefaultValue è puramente informativo, Visual Studio mostrerà il valore come non grassetto. –