Unsafe.Unbox<T>(Object) Metoda

Definice

mutable ref Vrátí hodnotu do pole.

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, který se má rozbalit.

Parametry

box
Object

Hodnota pro rozbalení.

Návraty

T

A mutable ref na hodnotu boxv rámečku .

Výjimky

box is null, and T is a non-nullable value type.

box není typ hodnoty v rámečku.

-nebo-

box není boxed T.

T nebyla nalezena.

Poznámky

Metoda Unbox<T> je jednoduše obálka pro instrukce unbox IL. Je užitečná jako optimalizace výkonu. Kdykoli je potřeba opakovaně volat rozhraní API Object s různými hodnotami typu hodnoty, je možné znovu použít stejný objekt pole, a ne pokaždé vytvořit nový objekt.

Metoda Unbox<T> má důležité omezení použití, které není vynuceno kompilátory jazyka a které je zodpovědností volajícího. Instrukce IL unbox vrátí ukazatel spravovaný kontrolovanou mutability. Vzhledem k tomu, že kompilátory jazyka .NET a .NET nemohou toto omezení reprezentovat, Unbox<T> vrátí metoda normální proměnlivou ref Thodnotu . Vývojáři však nesmí zmutovat vrácený odkaz, pokud si nejsou jistí, že T jde o měnitelný typ struktury. Protože například číselná primitiva Int32 nejsou proměnlivé typy struktur, následující kód není podporován:

// The following line is NOT SUPPORTED.
Unsafe.Unbox<int>(obj) = 30;

Naproti tomu typ Point jako je měnitelná struktura s veřejnými vlastnostmi setters, takže je podporováno mutování hodnoty v rámečku voláním setters vlastností:

// The following lines are legal and supported.
Unsafe.Unbox<System.Drawing.Point>(obj).X = 50;
Unsafe.Unbox<System.Drawing.Point>(obj).Y = 70;

Nahrazení celého odkazu však není podporováno, a to ani v případě, že se jedná o odkaz na proměnlivý typ 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);

Další informace, včetně podrobného popisu omezení použití této instrukce, najdete v oddílech III.1.8.1.2.2 ("Řízené ukazatele proměnlivosti") a III.4.32 ("unbox - převod typu hodnoty v rámečku na jeho nezpracovanou formu") v ECMA-335: Common Language Infrastructure (CLI)).

Platí pro