Unsafe.Unbox<T>(Object) Metoda
Definice
Důležité
Některé informace platí pro předběžně vydaný produkt, který se může zásadně změnit, než ho výrobce nebo autor vydá. Microsoft neposkytuje žádné záruky, výslovné ani předpokládané, týkající se zde uváděných informací.
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
A mutable ref
na hodnotu box
v rámečku .
Výjimky
box
is null
, and T
is a non-nullable value type.
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 T
hodnotu . 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)).