2015-12-27 8 views

risposta

13

Non v'è alcun modo semplice per farlo lasciando la proprietà automatica sul posto.

Se non si necessita di una proprietà di auto, convertire il codice a utilizzare una variabile privata e una proprietà non automatico:

private List<string> membershipIds = new List<string>(); 
public List<string> MembershipIds { 
    get { return membershipIds; } 
    set { membershipIds = value; } 
} 

Se si richiede l'auto-immobile, è necessario eseguire l'assegnazione nel costruttore:

public List<string> MembershipIds { get;set; } 
... 
// This constructor will do the assignment. 
// If you do not plan to publish no-argument constructor, 
// it's OK to make it private. 
public MyClass() { 
    MembershipIds = new List<string>(); 
} 
// All other constructors will call the no-arg constructor 
public MyClass(int arg) : this() {// Call the no-arg constructor 
    .. // do other things 
} 
public MyClass(string arg) : this() {// Call the no-arg constructor 
    .. // do other things 
} 
+1

Suvviato, ma quando uno "richiede una proprietà auto"? –

+0

Le concatenazioni di 'this()' richiedono una correzione sintattica. –

+0

@JeppeStigNielsen Grazie, sono passato alla modalità Java questa mattina! Penso che l'unico caso in cui uno richiederebbe una proprietà automatica è quando c'è uno standard di codifica a livello di azienda che richiede il loro uso. Non riesco a pensare a una ragione tecnica per richiedere il loro uso su una variabile + coppia get/set. – dasblinkenlight

4

Questa funzione è chiamata valori predefiniti per le proprietà e ciò che fa è di inserire la parte assegnazione ai costruttori del vostro class.

Modifica del codice al seguente fa lo stesso sul campo sostegno di tale proprietà, senza la necessità di cambiare tutti i costruttori, ed è supportato su C# 5.0:

private List<string> mMembershipIds = new List<string>(); 

public List<string> MembershipIds 
{ 
    get 
    { 
     return mMembershipIds; 
    } 
    set 
    { 
     mMembershipIds = value; 
    } 
}