Sobes.tech
Middle

Was sind Boxing und Unboxing in C# und wie kann man diese Prozesse vermeiden?

sobes.tech KI

Antwort von AI

Boxing ist die implizite Umwandlung eines Werttyps in einen Referenztyp object oder einen anderen Referenztyp, der von object abgeleitet ist. Dabei wird der Wert in einen neuen Speicherbereich im verwalteten Heap gelegt.

Unboxing ist die explizite Umwandlung eines object-Typs in einen Werttyp. Zuerst wird geprüft, ob das Objekt eine Instanz des gewünschten Werttyps ist, dann wird sein Datenfeld aus dem Heap kopiert.

Beispiele:

// Boxing
int wertTyp = 10;
object referenzTyp = wertTyp; // wertTyp wird in ein object eingepackt

// Unboxing
int entpackterWert = (int)referenzTyp; // referenzTyp wird in int entpackt

Vermeiden lässt sich Boxing und Unboxing durch die Verwendung von Generics. Generische Sammlungen und Methoden arbeiten direkt mit Werttypen, ohne sie in object umwandeln zu müssen. Das erhöht die Leistung und die Typsicherheit.

Beispiel mit Generics:

// Verwendung von List<T> statt ArrayList
using System.Collections.Generic;

List<int> generischeListe = new List<int>();
generischeListe.Add(10); // Kein Boxing

int wert = generischeListe[0]; // Kein Unboxing

Der Einsatz von Generics verhindert die Kosten, die durch Speicherzuweisungen im Heap und Datenkopien beim Boxing/Unboxing entstehen, und vermeidet Laufzeitfehler vom Typ.