Unsafe.Unbox<T>(Object) Yöntem
Tanım
Önemli
Bazı bilgiler ürünün ön sürümüyle ilgilidir ve sürüm öncesinde önemli değişiklikler yapılmış olabilir. Burada verilen bilgilerle ilgili olarak Microsoft açık veya zımni hiçbir garanti vermez.
Kutulanmış değere bir mutable ref
döndürür.
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ür Parametreleri
- T
Kutusu kaldırılacak tür.
Parametreler
- box
- Object
Gelen kutusunun kaldırılma değeri.
Döndürülenler
Kutulanan değere Amutable ref
.box
Özel durumlar
box
, null
ve T
boş değer atanamayan bir değer türüdür.
T
Buluna.
Açıklamalar
Unbox<T>
yöntemi yalnızca IL gelen kutusu açma yönergesi için bir sarmalayıcıdır. Performans iyileştirmesi olarak kullanışlıdır. Alan bir Object API'nin bir değer türünde farklı değerlerle tekrar tekrar çağrılması gerektiğinde, aynı kutu nesnesi her seferinde oluşturulan yeni bir nesne yerine yeniden kullanılabilir.
Unbox<T>
yöntemi, dil derleyicileri tarafından uygulanmayan ve çağıranın sorumluluğunda olan önemli bir kullanım kısıtlaması vardır. IL unbox
yönergesi, denetlenen mutability yönetilen bir işaretçi döndürür. .NET ve .NET dil derleyicileri bu kısıtlamayı temsil edemediğinden Unbox<T>
, yöntem normal bir değiştirilebilir ref T
döndürür. Ancak geliştiriciler, değişebilir bir yapı türü olduğundan T
emin olmadıkça döndürülen başvurunun sesini kapatmamalıdır. Örneğin, gibi Int32 sayısal temel öğeler değiştirilebilir yapı türleri olmadığından aşağıdaki kod desteklenmez:
// The following line is NOT SUPPORTED.
Unsafe.Unbox<int>(obj) = 30;
Buna karşılık, gibi Point bir tür ortak özellik ayarlayıcıları olan değiştirilebilir bir yapıdır, bu nedenle özellik ayarlayıcılarını çağırarak kutulanmış değerin sesini kapatmak desteklenir:
// The following lines are legal and supported.
Unsafe.Unbox<System.Drawing.Point>(obj).X = 50;
Unsafe.Unbox<System.Drawing.Point>(obj).Y = 70;
Ancak, başvuru değiştirilebilir bir yapı türüne olsa bile tüm başvuru toptancının değiştirilmesi desteklenmez.
// 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);
Bu yönergenin kullanım kısıtlamalarıyla ilgili ayrıntılı tartışmalar da dahil olmak üzere daha fazla bilgi için ECMA-335: Common Language Infrastructure (CLI) içindeki III.1.8.1.2.2 ("Controlled-mutability managed pointers") ve III.4.32 ("unbox -- boxed value type to its raw form") bölümlerine bakın.