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çimlendir | Derleme Biçimi | Description |
---|---|---|
FE 16 <T > |
Kısıtlı. thisType |
Türü kısıtlanmış T bir türdeki sanal yöntemi ç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,
ptr
yığına gönderilir. türüptr
için yönetilen bir işaretçi (&
)thisType
olmalıdır. Bunun, başvurusunun beklendiği, eklenmemişcallvirt
bir yönerge durumundanthisType
farklı olduğunu unutmayın.aracılığıyla
argN
yöntem bağımsız değişkenleriarg1
, tıpkı daha önce eklenmemişcallvirt
bir yönergede olduğu gibi yığına gönderilir.
Ön constrained
ek, yönergelerin değer türünden veya thisType
başvuru türünden bağımsız olarak tekdüzen bir şekilde yapılmasına izin verecek callvirt
şekilde tasarlanmıştır.
bir callvirt
method
yönerge ön ekine eklendiğinde constrained
thisType
yönerge aşağıdaki gibi yürütülür:
Bir başvuru türüyse
thisType
(değer türünün aksine)ptr
başvurusu kaldırılmıştır ve öğesine 'this' işaretçisicallvirt
method
olarak geçirilir.bir değer türüyse ve uygularsa
thisType
method
ptr
, tarafındanthisType
uygulanmasımethod
için bircall
method
yönergeye 'bu' işaretçisi olarak değiştirilmemiş olarak geçirilir.thisType
Bir değer türüyse ve
thisType
uygulanmıyorsathisType
ptr
method
, başvurulmaz, kutulanır ve yönergeyecallvirt
method
'bu' işaretçisi olarak geçirilir.
Bu son durum yalnızca , veya üzerinde tanımlandığında method
oluşabilir ve tarafından thisType
geçersiz kılınmayabilir.ObjectEnumValueType Bu durumda, kutulama özgün nesnenin bir kopyasının yapılmasına neden olur. Ancak, , ValueTypeve Enum yöntemlerinin Objecthiç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 derleme zamanında yukarıda özetlenen 'bu' dönüştürmeyi türüne ve çağrılan yönteme bağlı olarak etkili bir şekilde gerçekleştirmesi ptr
gerekir. Ancak, derleme zamanında bilinmeyen genel bir tür olduğunda ptr
, bu dönüştürmeyi derleme zamanında yapmak mümkün değildir.
İşlem kodu, constrained
IL derleyicilerinin bir değer türünden veya başvuru türünden ptr
bağımsız olarak bir sanal işleve tekdüzen bir şekilde çağrı yapmasını sağlar. Genel bir tür değişkeninin olduğu thisType
durum için tasarlanmış 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ılmıyorsa, 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 call
V.ToString()
yönerge yayılır; belirtilmezse bir box
yönerge ve yönerge callvirt
Object.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 MethodImpl
değ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 değer türünün yöntemlerinden hangisine 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:
Şunlara uygulanır
Geri Bildirim
https://aka.ms/ContentUserFeedback.
Çok yakında: 2024 boyunca, içerik için geri bildirim mekanizması olarak GitHub Sorunları’nı kullanımdan kaldıracak ve yeni bir geri bildirim sistemiyle değiştireceğiz. Daha fazla bilgi için bkz.Gönderin ve geri bildirimi görüntüleyin