Boxen geschieht, wenn ein Werttyp an eine Variable oder einen Parameter mit dem Typ object
. Da dies automatisch geschieht, ist die Frage nicht, wann Sie Boxing verwenden sollten, sondern wann Sie den Typ object
.
Der Typ object
sollte nur verwendet werden, wenn es absolut notwendig ist, da es die Typsicherheit umgeht, die ansonsten ein großer Vorteil einer statisch typisierten Sprache wie C# ist. Es kann jedoch in Fällen notwendig sein, in denen es nicht möglich ist, den Typ eines Wertes zur Kompilierungszeit zu kennen.
Zum Beispiel beim Lesen eines Datenbankfeldwertes über das ADO.NET-Framework. Der zurückgegebene Wert könnte entweder ein Integer oder ein String oder etwas anderes sein, daher muss der Typ object
und der Client-Code muss das entsprechende Casting durchführen. Um dieses Problem zu vermeiden, verwenden ORM-Frameworks wie Linq-to-SQL oder EF Core stattdessen statisch typisierte Entitäten, so dass die Verwendung von object
vermieden wird.
Vor der Einführung von Generika wurden Sammlungen wie ArrayList
hatte die Artikelarten als object
. Das bedeutete, dass man alles in einer Liste speichern konnte, und dass man eine Zeichenkette zu einer Liste von Zahlen hinzufügen konnte, ohne dass das Typsystem sich beschwerte. Generics lösen dieses Problem und machen Boxing bei der Verwendung von Sammlungen von Werttypen überflüssig.
Wenn Sie also etwas eingeben wie object
wird nur selten benötigt, und Sie möchten es vermeiden. Generics ist in der Regel eine bessere Lösung in Fällen, in denen der Code sowohl Werttypen als auch Referenztypen verarbeiten können muss.