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ü T kı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:
ptr
yönetilen bir işaretçi yığına gönderilir.ptr
türü,thisType
için yönetilen bir işaretçi (&
) olmalıdır. Bunun,thisType
başvurusu bekleyen, eklenmemiş bircallvirt
yönergesinden farklı olduğunu unutmayın.argN
aracılığıylaarg1
yöntem bağımsız değişkenleri, tıpkı eklenmemiş bircallvirt
yö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 callvirt
method
yönergesi constrained
thisType
tarafından ön eklendiğinde yönerge aşağıdaki gibi yürütülür:
thisType
bir başvuru türüyse (değer türünün aksine)ptr
başvurulmaz vemethod
callvirt
'bu' işaretçisi olarak geçirilir.thisType
bir değer türüyse vethisType
method
uygularsa,ptr
thisType
tarafındanmethod
uygulanması içincall
method
yönergesine 'bu' işaretçisi olarak değiştirilmeden geçirilir.thisType
bir değer türüyse vethisType
method
uygulamazsaptr
başvurulmaz, kutulanır vecallvirt
method
yönergesine 'bu' işaretçisi olarak geçirilir.
Bu son durum yalnızca Object, ValueTypeveya Enum üzerinde method
tanımlandığında ve thisType
tarafı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, call
V.ToString()
yönergesi gönderilir; aksi takdirde, box
yönergesi ve callvirt
Object.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 MethodImpl
kullanı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: