Opakowywanie typów
Adam Boduch
Boksowanie typów to pojęcie związane z programowaniem obiektowym w .NET.
W .NET Framework, w wielu przypadkach metody wymagają podania parametru typu System.Object
. Przykładowo, utwórzmy nowy projekt WinForms i umieśćmy na formularzu komponent ListBox
, a także przycisk Button
. Zadaniem programu będzie umieszczanie elementów na liście ListBox
po naciśnięciu przycisku. Klasa ListBox
posiada właściwość Items
, która służy do zarządzania elementami na liście. Nowy element można dodać wywołując metodę Add
, w następujący sposób:
ListBox1.Items.Add();
Oczywiście w nawiasie należy podać wartość, która zostanie dodana do listy. Metoda Add
posiada parametr, który jest typu System.Object
. Aby dodać wartość tekstową, należy skorzystać z mechanizmu boksowania:
procedure TWinForm2.Button2_Click(sender: System.Object; e: System.EventArgs);
begin
ListBox1.Items.Add(System.&Object('Delphi jest fajne'));
end;
Po uruchomieniu programu i naciśnięciu przycisku, do listy zostanie dodany nowy element.
Boksowanie jest techniką pozwalającą na konwersję pewnych danych na typ System.Object
.
.NET Framework umożliwia także operację odwrotną ? warto przeanalizować poniższy przykład:
procedure TWinForm2.Button2_Click(sender: System.Object; e: System.EventArgs);
type
TPoint = packed record
X, Y : Integer;
end;
var
P : TPoint;
O : System.Object;
begin
P.X := 1;
P.Y := 2;
{ pakowanie (boksowanie) }
O := System.Object(P);
{ odpakowywanie }
P := TPoint(O);
MessageBox.Show('Wartość X: ' + Convert.ToString(P.X));
end;
Zadeklarowałem rekord o nazwie TPoint oraz zmienną P, wskazującą na ten rekord. Po przydzieleniu danych do tego rekordu, zastosowałem boksowanie, aby dokonać konwersji danych do typu System.Object
. Później zastosowałem operację odwrotną ? rzutowanie na typ TPoint.
Zobacz też:
Zmieniłem nazwę, pozmieniałem linki w innych artykułach. Bez przekierowania [ustalone na gg]
Zdecydowanie popieram Koobę - boksować to się można na ringu.
A co do przykładu - nieco niefortunny chyba? Czy to tylko ograniczenie [kolejne] Delphi?
W C# mogę napisać:
To wymaga uściślenia!
Boksowanie typów? :|
imho lepiej brzmi tłumaczenie: Opakowywanie (tak to przetłumaczył Stanisław Piech w książce "Programowanie w języku C#" Erica Gunnersona), bo boksowanie to tak troche po polskiemu :P
gdyby ktos nie wiedział to po angielsku to jest boxing i unboxing
LOL, wchodzac, mialem wrazenie, ze dowiem sie jak pobic (naboksowac) jakiegos typa :D
Mi to rybka - mozna zmienic. Ale z ustawieniem przekierowania, aby linki ktore prowadza do tej strony - dzialaly.