Share via


Unsafe.Unbox<T>(Object) Metode

Definisi

Mengembalikan mutable ref ke nilai berkotak.

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

Jenis parameter

T

Jenis yang akan dibuka kotaknya.

Parameter

box
Object

Nilai untuk membuka kotak.

Mengembalikan

T

ke mutable ref nilai boxberkotak .

Pengecualian

box adalah null, dan T merupakan jenis nilai yang tidak dapat diubah ke null.

box bukan tipe nilai berkotak.

-atau-

box bukan kotak T.

T tidak dapat ditemukan.

Keterangan

Metode Unbox<T> ini hanyalah pembungkus untuk instruksi unbox IL. Ini berguna sebagai pengoptimalan performa. Setiap kali API yang membutuhkan Object waktu perlu dipanggil berulang kali dengan nilai yang berbeda dari jenis nilai, objek kotak yang sama dapat digunakan kembali daripada yang baru dibuat setiap kali.

Metode Unbox<T> ini memiliki batasan penggunaan penting yang tidak diberlakukan oleh pengkompilasi bahasa dan itu adalah tanggung jawab pemanggil. Instruksi IL unbox mengembalikan penunjuk terkelola mutabilitas terkontrol. Karena pengkompilasi bahasa .NET dan .NET tidak dapat mewakili batasan ini, Unbox<T> metode mengembalikan yang dapat diubah ref Tnormal. Namun pengembang tidak boleh memutasi referensi yang dikembalikan kecuali mereka yakin bahwa itu adalah jenis struct yang T dapat diubah. Misalnya, karena primitif numerik seperti Int32 bukan jenis struct yang dapat diubah, kode berikut tidak didukung:

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

Sebaliknya, jenis seperti Point adalah struktur yang dapat diubah dengan setter properti publik, sehingga bermutasi nilai kotak dengan memanggil setter properti didukung:

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

Namun, mengganti seluruh grosir referensi tidak didukung, bahkan jika referensinya adalah ke jenis struct yang dapat diubah.

// 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);

Untuk informasi selengkapnya, termasuk diskusi terperinci tentang batasan penggunaan instruksi ini, lihat bagian III.1.8.1.2.2 ("Controlled-mutability managed pointers") dan III.4.32 ("unbox -- convert boxed value type to its raw form") in ECMA-335: Common Language Infrastructure (CLI).

Berlaku untuk