Opakowywanie typów
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:
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:
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:
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ż:
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;
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;
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ż:



A co do przykładu - nieco niefortunny chyba? Czy to tylko ograniczenie [kolejne] Delphi?
W C# mogę napisać:
To wymaga uściślenia!
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
gdyby ktos nie wiedział to po angielsku to jest boxing i unboxing