Aracılığıyla paylaş


Unsafe.Unbox<T>(Object) Yöntem

Tanım

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

T

Kutulanan değere Amutable ref.box

Özel durumlar

box , nullve T boş değer atanamayan bir değer türüdür.

box kutulanmış bir değer türü değildir.

-veya-

box kutulu Tbir değildir.

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 Tdö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.

Şunlara uygulanır