2016-10-21 3 views
-4

Dies ist ein Code-SnippetInstantiate eine Feldvariable

ist
public class CartItemList 
{ 
    //internal list of items and the constructor that instantiates it 
    private List<CartItem> **cartItems**; 
    public CartItemList() { 
     cartItems = new List<CartItem>(); 

ich fragen will, ist es möglich, cartItems Liste Konstruktor vor CartItemList starten() Konstruktor es instanziiert? und dann einfach den Standardkonstruktor von CartItemList verwenden?

So:

public class CartItemList 
{ 
    //internal list of items and the constructor that instantiates it 
    private List<CartItem> cartItems= new List<CartItem>(); 
    public CartItemList() 
+2

Was ist das Problem? Hast du überhaupt versucht, diesen Code auszuführen? –

+1

Bitte beachten Sie auch, dass dies * kein * Javascript ist, also nicht als lauffähiges JavaScript-Code-Snippet gekennzeichnet werden sollte. (Ich habe die Frage bearbeitet, um diese Tags zu entfernen und den Code zu formatieren.) –

+0

@JonSkeet danke für den Kommentar, du hast Recht – mybirthname

Antwort

2

Ja, ein class (Referenztyp) können Feld initializers wie das haben. Der Feldinitialisierer wird vor dem Instanzkonstruktor ausgeführt.

Wenn (und nur wenn) Sie keinen Instanzkonstruktor selbst erstellen (und wenn die Klasse nicht statisch ist), erstellt der C# -Compiler einen für Sie. Es wird public (oder protected im Falle einer abstract Klasse) sein und wird Null Argumente nehmen.


können Sie betrachten das Feld als readonly Markierung, wenn sie nur vom Initialisierungsstab zugeordnet ist und von den Instanzkonstruktoren. Sie können immer noch Add, Remove, Clear etc. die List<>, aber die Instanz wird behoben, nachdem Konstruktoren beendet wurden.

0

Ja, Sie können dies tun, wie Sie in Ihrem Code gezeigt haben, und es wird vor dem Konstruktor ich glaube laufen.

Ich würde so weit gehen zu sagen, dass dies der empfohlene Weg sein sollte, wie manchmal Leute vergessen, Feldvariablen in Konstruktoren zu initialisieren, aber nur wenn die Situation es erfordert.

Verwandte Themen