Unsafe.Unbox<T>(Object) Метод
Определение
Важно!
Некоторые сведения относятся к предварительной версии продукта, в которую до выпуска могут быть внесены существенные изменения. Майкрософт не предоставляет никаких гарантий, явных или подразумеваемых, относительно приведенных здесь сведений.
mutable ref Возвращает значение в поле.
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
Параметры типа
- T
Тип для распаковки.
Параметры
- box
- Object
Значение для распаковки.
Возвращаемое значение
Значение mutable ref в поле box.
Исключения
box is null, и T является типом значения, не допускающего значение NULL.
T не удается найти.
Комментарии
Метод Unbox<T> — это просто оболочка для инструкции распаковки IL. Это полезно в качестве оптимизации производительности. Всякий раз, когда API, принимающее Object необходимость многократно вызываться с разными значениями типа значения, один и тот же объект box можно повторно использовать, а не новый созданный каждый раз.
Метод Unbox<T> имеет важное ограничение использования, которое не применяется компиляторами языка, и это ответственность вызывающего объекта. Инструкция IL unbox возвращает управляемый указатель с управляемой мутируемостью. Так как компиляторы языка .NET и .NET не могут представлять это ограничение, метод Unbox<T> возвращает обычный изменяемый ref T. Однако разработчики не должны изменять возвращаемую ссылку, если они не уверены, что T это мутируемый тип структуры. Например, поскольку числовые примитивы, такие как Int32 не изменяемые типы структур, не поддерживают следующий код:
// The following line is NOT SUPPORTED.
Unsafe.Unbox<int>(obj) = 30;
В отличие от этого, тип, такой как Point мутируемая структура с помощью открытых наборов свойств, поэтому изменение поля путем вызова наборов свойств поддерживается:
// The following lines are legal and supported.
Unsafe.Unbox<System.Drawing.Point>(obj).X = 50;
Unsafe.Unbox<System.Drawing.Point>(obj).Y = 70;
Однако замена всего оптового оптового списка ссылок не поддерживается, даже если ссылка относится к мутируемому типу структуры.
// 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);
Дополнительные сведения, включая подробное обсуждение ограничений использования этой инструкции, см. в разделах III.1.8.1.2.2 ("Управляемые указатели управляемого изменения") и III.4.32 ("unbox -- converted value type to the raw form") in ECMA-335: Common Language Infrastructure (CLI).