Unsafe.Unbox<T>(Object) Metode
Definisi
Penting
Beberapa informasi terkait produk prarilis yang dapat diubah secara signifikan sebelum dirilis. Microsoft tidak memberikan jaminan, tersirat maupun tersurat, sehubungan dengan informasi yang diberikan di sini.
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
ke mutable ref
nilai box
berkotak .
Pengecualian
box
adalah null
, dan T
merupakan jenis nilai yang tidak dapat diubah ke null.
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 T
normal. 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).