Boxing/Unboxing

Neral

Mitglied
Hi,
da ich noch recht neu bin und schon des oefteren ueber diesen Begriff gelesen haben aber nicht genau weiß was er bedeutet frage ich Euch. :)

Also was ist der Sinn dahinter ?

gruss neral
 
Hallo.

Zum Beispiel die Klasse ArrayList, ihre Add Methode fordert einen Parameter vom Typ Object.
Jetzt könnte man annehmen das wir, wenn wir etwas in der ArrayList speichern wollen, zuerst eine Typkonvertierung vornehmen müssen. Dem ist aber nicht so, das erledigt .net für uns. Wir können alles mögliche in der ArrayList speichern, weil alles von object abgeleitet ist, und wir brauchen nichts konvertieren/casten weil das .net Automatisch vornimmt.

Code:
ArrayList alist = new ArrayList();
alist.Add(1); // primitiver Typ integer wird object gewandelt. In ein object-Objekt gewickelt, zum speichern.

// hier der int nochmal als object
object o = alist[0];

// und da ist unser integer wieder.
int i = (int) o;

Das war ne kurze erklärung, hoffe war verständlich.

MfG,
Alex
 
Hm...

ArrayList alist = new ArrayList();

Objekt von ArrayList wir erstelt.


1 wird in dem Objekt geschrieben.

object o = alist[0];

Ein "dummy" wird erzeugt um den Inhalt vom Objekt alist in ein int wert zu speichern. Muesste es nicht alist[1] sein ?!, denn in der zweiten Zeile wird doch 1 hinzugefuegt oder nicht?


Die Umspeicherung erfolgt. Warum steht "(int)" vor dem Objekt? Würde es auch ohne dem gehen? Oder ist es zwanghaft, damit festgelegt ist, dass ein Integerwert im Objekt ist?

Fragen ueber Fragen :)

Ich habe versucht die einzelnen Schritte etwas nachzuvollziehen. Hoffe, dass es so ungefaehr richtig ist.

gruss und thx
 
Die ArrayList ist wie ein Array, nur muss man ihr keine fixe Größe geben, weiters hat sie keinen bestimmten Typ.
Deswegen greife ich auch mit der 0 auf die Zahl wieder zu, es ist ein Index (die 0).

Ein "dummy" wird erzeugt um den Inhalt vom Objekt alist in ein int wert zu speichern. Muesste es nicht alist[1] sein ?!, denn in der zweiten Zeile wird doch 1 hinzugefuegt oder nicht?
Damit wollte ich nur zeigen, dass der Integer in eine object-Instanz gewickelt wurde. Könnten wir auch lassen, und stattdessen folgenden Code verwenden.

Code:
int i = (int) alist[0];

Das (int) ist eine sogenannte Cast-Operation. Sozusagen eine Typkonvertierung, wobei nicht gewandelt wird,da dass Objekt welches gewandelt wird in unserem Fall ja der Int ist, nur ist er eben ins object gewickelt.

Diese "Umwandlung" wird benötigt, damit man auf die Methoden welche der eigentliche Typ hat auch aufrufen kann. Mit er object-Instanz kann man dies nicht.
Weiters kann man einer Methode welche einen Int verlangt, ja kein object übergeben.
 
Ahhh langsam kommt Licht in die dunklen Ecken ;)

Ok ich danke Dir fuer Deine ausfuehrliche Erklaerung :)
Echt Top!

Gruss
 
Zurück