OpCodes.Constrained Alan
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.
Sanal yöntem çağrısının yapıldığı türü kısıtlar.
public: static initonly System::Reflection::Emit::OpCode Constrained;
public static readonly System.Reflection.Emit.OpCode Constrained;
staticval mutable Constrained : System.Reflection.Emit.OpCode
Public Shared ReadOnly Constrained As OpCode
Alan Değeri
Açıklamalar
Aşağıdaki tabloda yönergenin onaltılık ve Microsoft ara dil (MSIL) derleme biçiminin yanı sıra kısa bir başvuru özeti listelenmiştir:
| Format | Derleme Biçimi | Açıklama |
|---|---|---|
FE 16 <T> |
Kısıtlı. thisType |
Türü kısıtlanmış Tbir tür üzerinde bir sanal yöntem çağırın. |
Ön constrained eke yalnızca bir callvirt yönergede izin verilir.
MSIL yığınının bu noktadaki durumu aşağıdaki gibi olmalıdır:
Yönetilen işaretçi ,
ptryığına gönderilir. türüptr, için&yönetilen bir işaretçi (thisType) olmalıdır. Bunun, başvurusu beklenen, eklenmemişcallvirtbir yönerge durumundanthisTypefarklı olduğunu unutmayın.aracılığıyla
arg1yöntem bağımsız değişkenleriargN, tıpkı daha önce eklenmemişcallvirtbir yönergede olduğu gibi yığına gönderilir.
Ön constrained ek, yönergelerin değer türünden veya başvuru türünden callvirt bağımsız olarak tekdüzen bir şekilde yapılmasına izin verecek thisType şekilde tasarlanmıştır.
bir callvirtmethod yönergenin ön eki eklendiğinde constrainedthisTypeyönerge aşağıdaki gibi yürütülür:
Bir başvuru türüyse
thisType(değer türünün aksine)ptrbaşvurulmaz ve öğesine 'bu' işaretçisicallvirtmethodolarak geçirilir.Bir değer türüyse ve
thisTypeuygularsathisTypemethod,ptrtarafından uygulanmasıcallmethodiçin birmethodthisTypeyönergeye 'bu' işaretçisi olarak değiştirilmemiş olarak geçirilir.Bir değer türüyse ve
thisTypeuygulanmıyorsathisTypemethodptrbaşvurulmaz, kutulanır ve yönergeyecallvirtmethod'bu' işaretçisi olarak geçirilir.
Bu son durum yalnızca , veya üzerinde tanımlandığında method oluşabilir ve tarafından Objectgeçersiz kılınmayabilir.ValueTypeEnumthisType Bu durumda, kutulama özgün nesnenin bir kopyasının yapılmasına neden olur. Ancak, , yöntemlerinin ObjectValueTypeEnum hiçbiri nesnenin durumunu değiştirmediğinden, bu olgu algılanamaz.
Ön ek, constrained genel kod oluşturan IL oluşturucularını destekler. Normalde callvirt yönerge değer türlerinde geçerli değildir. Bunun yerine, IL derleyicilerinin türüne ve çağrılan yöntemine bağlı olarak derleme zamanında yukarıda özetlenen 'bu' dönüştürmeyi etkili bir şekilde gerçekleştirmesi ptr gerekir. Ancak, derleme zamanında bilinmeyen genel bir tür olduğunda ptr , derleme zamanında bu dönüşümü yapmak mümkün değildir.
opcode constrained , IL derleyicilerinin bir sanal işleve değer türünden veya başvuru türünden ptr bağımsız olarak tekdüzen bir şekilde çağrı yapmasını sağlar. Genel tür değişkeninin olduğu thisType duruma yönelik olsa da, constrained ön ek, genel olmayan türler için de çalışır ve değer türleri ile başvuru türleri arasındaki ayrımı gizleyen dillerde sanal çağrı oluşturmanın karmaşıklığını azaltabilir.
Ön ekin constrained kullanılması, değer türleriyle ilgili olası sürüm oluşturma sorunlarını da önler.
constrained Ön ek kullanılmazsa, bir değer türünün System.Object yöntemini geçersiz kılıp geçersiz kılmadığına bağlı olarak farklı IL belirtilmelidir. Örneğin, bir değer türü V Object.ToString() yöntemini geçersiz kılarsa, bir callV.ToString() yönerge yayılır; yoksa bir box yönerge ve yönerge callvirtObject.ToString() yayılır. Geçersiz kılma daha sonra kaldırılırsa eski durumda ve daha sonra bir geçersiz kılma eklenirse ikinci durumda bir sürüm oluşturma sorunu ortaya çıkabilir.
Ön constrained ek, arabirim yöntemini uygulayan değer türü yöntemi kullanılarak MethodImpldeğiştirilebildiği için, değer türlerinde arabirim yöntemlerini çağırmak için de kullanılabilir.
constrained Ön ek kullanılmazsa, derleyici derleme zamanında hangi değer türünün yöntemlerine bağlanacağını seçmeye zorlanır. ön ekini constrained kullanmak, MSIL'in derleme zamanında değil, çalışma zamanında arabirim yöntemini uygulayan yönteme bağlanmasına olanak tanır.
Aşağıdaki Emit yöntem aşırı yüklemesi, opcode'unu constrained kullanabilir: