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 dili (MSIL) derleme biçiminin yanı sıra kısa bir başvuru özeti listelenmiştir:
| Biçim | Derleme Biçimi | Tarif |
|---|---|---|
FE 16 <T> |
Kısıtlı. thisType |
türü Tkısıtlanmış bir tür üzerinde sanal yöntem çağırın. |
constrained ön ekine yalnızca callvirt yönergesinde izin verilir.
MSIL yığınının bu noktadaki durumu aşağıdaki gibi olmalıdır:
ptryönetilen bir işaretçi yığına gönderilir.ptrtürü,thisTypeiçin yönetilen bir işaretçi (&) olmalıdır. Bunun,thisTypebaşvurusu bekleyen, eklenmemiş bircallvirtyönergesinden farklı olduğunu unutmayın.argNaracılığıylaarg1yöntem bağımsız değişkenleri, tıpkı eklenmemiş bircallvirtyönergesinde olduğu gibi yığına gönderilir.
constrained ön eki, callvirt yönergelerin thisType değer türünden veya başvuru türünden bağımsız olarak tekdüzen bir şekilde yapılmasına izin verecek şekilde tasarlanmıştır.
bir callvirtmethod yönergesi constrainedthisTypetarafından ön eklendiğinde yönerge aşağıdaki gibi yürütülür:
thisTypebir başvuru türüyse (değer türünün aksine)ptrbaşvurulmaz vemethodcallvirt'bu' işaretçisi olarak geçirilir.thisTypebir değer türüyse vethisTypemethoduygularsa,ptrthisTypetarafındanmethoduygulanması içincallmethodyönergesine 'bu' işaretçisi olarak değiştirilmeden geçirilir.thisTypebir değer türüyse vethisTypemethoduygulamazsaptrbaşvurulmaz, kutulanır vecallvirtmethodyönergesine 'bu' işaretçisi olarak geçirilir.
Bu son durum yalnızca Object, ValueTypeveya Enum üzerinde method tanımlandığında ve thisTypetarafından geçersiz kılınmadığında oluşabilir. Bu durumda, kutulama özgün nesnenin bir kopyasının yapılmasına neden olur. Ancak, Object, ValueTypeve Enum yöntemlerinin hiçbiri nesnenin durumunu değiştirmediğinden, bu olgu algılanamaz.
constrained ön eki, genel kod oluşturan IL oluşturucularını destekler. Normalde callvirt yönergesi değer türlerinde geçerli değildir. Bunun yerine, IL derleyicilerinin ptr türüne ve çağrılan yönteme bağlı olarak derleme zamanında yukarıda özetlenen 'bu' dönüştürmeyi etkili bir şekilde gerçekleştirmesi gerekir. Ancak, ptr derleme zamanında bilinmeyen genel bir tür olduğunda, derleme zamanında bu dönüşümü yapmak mümkün değildir.
constrained opcode, IL derleyicilerinin bir sanal işleve ptr değer türünden veya başvuru türünden bağımsız olarak tekdüzen bir şekilde çağrı yapmasını sağlar.
thisType genel bir tür değişkeni olduğu durum için tasarlanmış olsa da, constrained ön eki 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.
constrained ön ekinin kullanılması, değer türleriyle ilgili olası sürüm oluşturma sorunlarını da önler.
constrained ön eki 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, callV.ToString() yönergesi gönderilir; aksi takdirde, box yönergesi ve callvirtObject.ToString() yönergesi gönderilir. 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.
constrained ön eki, arabirim yöntemini uygulayan değer türü yöntemi MethodImplkullanılarak değiştirilebileceği için, değer türlerinde arabirim yöntemlerini çağırmak için de kullanılabilir.
constrained ön eki kullanılmazsa, derleyici derleme zamanında değer türünün yöntemlerinden hangisinin bağlanacağını seçmeye zorlanır.
constrained ön ekini 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öntemi aşırı yüklemesi constrained opcode'unu kullanabilir: