This post originated from an RSS feed registered with .NET Buzz
by -.
Original Post: Begriffserkl��rung: Boxing und Unboxing
Feed Title: Norbert Eder - Living .NET
Feed URL: http://feeds.feedburner.com/NorbertEder-Livingnet
Feed Description: Copyright (c)2005, 2006 by Norbert Eder
F��r die einen ein alter Hut, f��r andere ein Grund um auf die Suche nach Informationen und Erkl��rungen zu gehen. Nun, ein wenig Licht ins Dunkel kann ich hiermit bringen. Es erfolgt nicht nur eine Erkl��rung der beiden Begriffe, sondern auch Hinweise wann diese Techniken eingesetzt werden sollen/k��nnen und wann dies zu vermeiden sind.
Boxing ist die Konvertierung eines Wertetyp in einen Verweistyp. Beispiel:
int i = 999; // Werttyp
object o = (object)i; // Konvertierung in einen Verweistyp
Unboxing ist die Konvertierung eines Verweistyp in einen Wertetyp. Beispiel:
object o = 999; // Wert in einem Verweistyp
int i = (int)o; // Konvertierung in einen Wertetype
Boxing und Unboxing versachen zus��tzlichen Aufwand, daher sollten diese Operationen vermieden werden. Je h��ufiger der entsprechende Code-Bereich ausgef��hrt wird, desto weniger empfhielt sich die Verwendung.
Es sei an dieser Stelle bemerkt, dass auch der Aufruf von virtuellen Methoden, die Strukturen von System.Object erben, unter Boxing fallen. (Beispiel: ToString).
Empfohlene Vorgehensweisen Um Boxing und Unboxing zu Vermeiden (und somit auch etwaige Performanceprobleme), empfiehlt es sich, einige Punkte einzuhalten. Hier eine (unvollst��ndige) Liste:
- Werden Strukturen definiert, sollten die Methoden GetHashCode, Equals und ToString ��berschrieben werden
- Bestehen Methoden die Parameter vom Typ object besitzen, die jedoch zur ��bergabe von Wertetypen verwenden werden, empfiehlt es sich, ��berladungen zu definieren, die auf den jeweiligen Wertetyp abgestimmt sind.
- Anstatt object-Parameter zu verwenden, empfiehlt sich die Verwendung von Generika.
Wann soll Boxing/Unboxing eingesetzt werden Manche m��gen mir jetzt vielleicht widersprechen, aber ich pers��nlich empfehle Boxing und Unboxing nicht einzusetzen. Selbst bei Code-Teilen die nur selten ausgef��hrt werden empfiehlt es sich, beispielsweise auf Generika zu setzen oder ��berladungen f��r die entsprechenden Wertetypen zu schaffen. Dadurch erh��ht sich um einen die ��bersichtlichkeit, die Verst��ndlichkeit und vor allem auch die Performance.