var i = new int[2];
Wird "i" als geboxed betrachtet?
Nein, es gibt nichts, was verboxt wird. Das Schlüsselwort var bedeutet nicht, dass die Variable verboxt ist. Es erfolgt keine Konvertierung während der Laufzeit. Das Schlüsselwort var ist streng genommen eine C#-Konstruktion. Was tatsächlich passiert, wenn du var verwendest, ist:
var i = new int[1];
IL sieht es als:
int[] i = new int[1]
Jetzt, wenn du fragst, ob beim Zuweisen einer Integer-Zahl zu einem Teil des Arrays von i verboxt wird:
zum Beispiel:
i[0] = 2;
Nein, das passiert nicht.
Dies steht im Gegensatz zu folgendem:
var o = new object[1];
o[0] = 2;
In diesem Beispiel geschieht es und deshalb war der Einsatz von ArrayList (denke an ein erweiterbares Array) in 1.0, 1.1 (vor Generics) sehr kostspielig. Der folgende Kommentar gilt auch für das Beispiel mit object[]
:
Jeder Referenz- oder Werttyp, der zu einem ArrayList hinzugefügt wird, wird implizit zu Object hochgestuft. Wenn die Elemente Werttypen sind, müssen sie beim Hinzufügen zur Liste verboxt und beim Abrufen ausgepackt werden. Sowohl die Umwandlung als auch die Box- und Unbox-Vorgänge beeinträchtigen die Leistung; die Auswirkungen von Boxing und Unboxing können in Szenarien, in denen über große Sammlungen iteriert werden muss, ziemlich signifikant sein.
Boxen tritt nur auf, wenn ein Werttyp (d. h. ein primitiver Typ, eine Struktur oder eine Aufzählung) als Verweistyp behandelt wird. Ihr Array ist so deklariert, dass es Werte des Typs int
enthält. Das var
Schlüsselwort sagt dem Compiler lediglich, den Typ der Variable i
zu inferieren, anstatt dass Sie ihn manuell angeben müssen.
Wenn Sie geschrieben hätten:
var i = new object[2];
Würde der Compiler das zu object[] i = new object[2]
übersetzen, und alle int
Werte, die Sie dort hineinsetzen, würden geboxt werden. Jeder Verweistyp, den Sie in das gleiche Array setzen, würde keine Boxen benötigen.
Kurz gesagt hat var
nichts mit Boxen zu tun.
Hier ist ein Diagramm verschiedener Typen in .NET. Sie möchten vielleicht auch .NET Typgrundlagen lesen.
CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.