Unsafe.Unbox<T>(Object) メソッド
定義
重要
一部の情報は、リリース前に大きく変更される可能性があるプレリリースされた製品に関するものです。 Microsoft は、ここに記載されている情報について、明示または黙示を問わず、一切保証しません。
ボックス化された値に 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
ボックス化解除する値。
戻り値
ボックス化された値 box
への mutable ref
。
例外
box
は null
です。T
は null 非許容値型です。
T
が見つかりません。
注釈
メソッドは Unbox<T>
単に IL unbox 命令のラッパーです。 パフォーマンスの最適化として役立ちます。 を受け取る Object API を値型の異なる値で繰り返し呼び出す必要がある場合は常に、毎回作成される新しいボックス オブジェクトではなく、同じボックス オブジェクトを再利用できます。
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);
この命令の使用法の制約の詳細な説明を含む詳細については、「 ECMA-335: 共通言語インフラストラクチャ (CLI)」のセクション III.1.8.1.2.2 ("変更制御マネージド ポインター") および III.4.32 ("unbox -- ボックス化された値の型を未加工の形式に変換する") を参照してください。
適用対象
.NET