Wenn es Standardkonstruktor ist, wer wird die Mitgliedsvariablen auf Null initialisieren, wie ist das möglich?
%Vor% Weil Feldinitialisierungen vor Konstruktoren ausgeführt werden. Sie haben j
value in Ihrem Konstruktor nicht zugewiesen, es wird standardmäßig 0
sein, da es sich um int
handelt.
Von 10.4.4 Feldinitialisierung
>Der Anfangswert eines Feldes, sei es ein statisches Feld oder ein Instanzfeld ist der Standardwert ( Abschnitt 5.2 ) von die Felder Geben Sie ein.
Wer macht das? Nun, sieht aus wie newobj
tut das, wenn Sie new
aufrufen. Werfen Sie einen Blick dyatchenkos Antwort für weitere Details.
Eine Feldinitialisierung erfolgt vor einem Konstruktoraufruf über den Befehl newobj
. Es ist einfach, nach der Dekompilierung der ausführbaren Datei mit dem folgenden C # -Code zu überprüfen:
Teil des dekompilierten MSIL-Codes (Methode main):
%Vor% Wie wir sehen können, verwendet die MSIL die Anweisung newobj
, um eine Instanz der Klasse A zu erstellen. Nach den folgenden Microsoft Acticle :
Der Befehl newobj weist eine neue Instanz der zugeordneten Klasse zu mit ctor und initialisiert alle Felder in der neuen Instanz auf 0 (der richtiger Typ) oder Null-Referenzen als geeignet. Es ruft dann die Konstruktor ctor mit den gegebenen Argumenten zusammen mit dem neu erstellten Beispiel. Nachdem der Konstruktor aufgerufen wurde, wird das nun initialisiert Objektreferenz (Typ O) wird auf den Stapel geschoben.
Wenn es falsch ist, bitte kommentieren Sie es, andernfalls weisen Sie es bitte als richtige Antwort zu.
In C # werden int
Variablen immer auf 0 gesetzt, sofern nicht anders angegeben. In Ihrem Konstruktor:
Wenn Ihr Objekt instanziiert wird, wird Ihre i
-Eigenschaft auf 12 initialisiert, während Ihre j
-Eigenschaft auf 0 initialisiert wird.
In Ihrem Code:
%Vor%Ich hoffe, das hilft!
C # Standard int
auf 0
setzen. Weitere Informationen zu den Standardwerten finden Sie hier
Und noch mehr, da diese Felder gelten
Der Anfangswert eines Feldes, ob es ein statisches Feld oder ein Instanzfeld ist, ist der Standardwert.
Der Standardkonstruktor wird i
zu 12
zuweisen, aber j
wird 0
als default
-Wert haben, da er nirgendwo im Konstruktor zugewiesen wurde.
Tags und Links c#