Unsafe.Unbox<T>(Object) Metoda
Definicja
Ważne
Niektóre informacje odnoszą się do produktu w wersji wstępnej, który może zostać znacząco zmodyfikowany przed wydaniem. Firma Microsoft nie udziela żadnych gwarancji, jawnych lub domniemanych, w odniesieniu do informacji podanych w tym miejscu.
mutable ref
Zwraca wartość do wartości pola.
public:
generic <typename T>
where T : value class static T % Unbox(System::Object ^ box);
public static ref T Unbox<T> (object box) where T : struct;
static member Unbox : obj -> 'T (requires 'T : struct)
Public Shared Function Unbox(Of T As Structure) (box As Object) As T
Parametry typu
- T
Typ, który ma być rozpakowany.
Parametry
- box
- Object
Wartość do rozpalokowania.
Zwraca
A mutable ref
do wartości box
pola .
Wyjątki
box
to null
, a T
jest typem wartości innej niż null.
T
nie można odnaleźć.
Uwagi
Metoda Unbox<T>
jest po prostu otoką instrukcji unbox IL. Jest to przydatne jako optymalizacja wydajności. Za każdym razem, gdy interfejs API, który wymaga Object wielokrotnego wywołania z różnymi wartościami typu wartości, tego samego obiektu pola można użyć ponownie, a nie nowego utworzonego za każdym razem.
Metoda Unbox<T>
ma ważne ograniczenie użycia, które nie jest wymuszane przez kompilatory języka i jest to odpowiedzialność obiektu wywołującego. Instrukcja IL unbox
zwraca kontrolowany wskaźnik zarządzany przez niezmienność. Ponieważ kompilatory języków .NET i .NET nie mogą reprezentować tego ograniczenia, Unbox<T>
metoda zwraca normalny modyfikowalny ref T
element . Jednak deweloperzy nie mogą modyfikować zwróconego odwołania, chyba że są pewni, że T
jest to modyfikowalny typ struktury. Na przykład ponieważ typy pierwotne liczbowe, takie jak Int32 nie są modyfikowalnymi typami struktury, następujący kod nie jest obsługiwany:
// The following line is NOT SUPPORTED.
Unsafe.Unbox<int>(obj) = 30;
Z kolei typ, taki jak Point jest modyfikowalny, struktura z zestawami właściwości publicznych, więcmutowanie wartości pola przez wywołanie metod ustawiających właściwości jest obsługiwane:
// The following lines are legal and supported.
Unsafe.Unbox<System.Drawing.Point>(obj).X = 50;
Unsafe.Unbox<System.Drawing.Point>(obj).Y = 70;
Jednak zastąpienie całej hurtowni referencyjnej nie jest obsługiwane, nawet jeśli odwołanie dotyczy modyfikowalnego typu struktury.
// Resetting the reference to default(T) is NOT SUPPORTED.
Unsafe.Unbox<System.Drawing.Point>(obj) = default(System.Drawing.Point);
// Setting the reference to a completely new value is NOT SUPPORTED.
Unsafe.Unbox<System.Drawing.Point>(obj) = new System.Drawing.Point(50, 70);
Aby uzyskać więcej informacji, w tym szczegółowe omówienie ograniczeń użycia tej instrukcji, zobacz sekcje III.1.8.1.2.2 ("Controlled-mutability managed pointers") i III.4.32 ("unbox -- convert boxed value type to its raw form") in ECMA-335: Common Language Infrastructure (CLI).