OpCodes.Callvirt 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.
Dönüş değerini değerlendirme yığınına göndererek bir nesne üzerinde geç bağlanan bir yöntemi çağırır.
public: static initonly System::Reflection::Emit::OpCode Callvirt;
public static readonly System.Reflection.Emit.OpCode Callvirt;
staticval mutable Callvirt : System.Reflection.Emit.OpCode
Public Shared ReadOnly Callvirt 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:
Biçimlendir | Derleme Biçimi | Description |
---|---|---|
6F <T > |
Callvirt method |
ile obj ilişkili belirli bir yöntemi çağırır. |
Sıralı sırada yığın geçiş davranışı şu şekildedir:
Yığına bir nesne başvurusu
obj
gönderilir.aracılığıyla
argN
yöntem bağımsız değişkenleriarg1
yığına gönderilir.aracılığıyla
argN
yöntem bağımsız değişkenleriarg1
ve nesne başvurusuobj
yığından çıkarılır; yöntem çağrısı bu bağımsız değişkenlerle gerçekleştirilir ve denetim yöntem meta veri belirteci tarafından başvuruda bulunılan yöntemineobj
aktarılır. Tamamlandığında, çağıran yöntemi tarafından bir dönüş değeri oluşturulur ve çağırana gönderilir.Dönüş değeri yığına gönderilir.
Yönerge, callvirt
bir nesne üzerinde geç bağlanan bir yöntemi çağırır. Başka bir ifadeyle yöntemi, yöntem işaretçisinde görünen derleme zamanı sınıfı yerine çalışma zamanı türüne obj
göre seçilir.
Callvirt
hem sanal hem de örnek yöntemlerini çağırmak için kullanılabilir. Denetimi callvirt
aktarmadan önce geçerli yığın çerçevesinin serbest bırakılacağını belirtmek için yönergeden hemen önce bir tail
(Tailcall) ön eki eklenebilir. Çağrı denetimi özgün yöntemden daha yüksek bir güven yöntemine aktaracaksa yığın çerçevesi serbest bırakılmaz.
Yöntem meta veri belirteci çağrılacak yöntemin adını, sınıfını ve imzasını sağlar. ile obj
ilişkilendirilmiş sınıf, örneği olduğu sınıfıdır. sınıfı belirtilen yöntem adı ve imzası ile eşleşen statik olmayan bir yöntem tanımlarsa, bu yöntem çağrılır. Aksi takdirde, bu sınıfın temel sınıf zincirindeki tüm sınıflar sırayla denetleniyor. Yöntem bulunamazsa bu bir hatadır.
Callvirt
yöntemini çağırmadan önce nesnesini ve ilişkili bağımsız değişkenleri değerlendirme yığınından açar. Yöntemin dönüş değeri varsa, yöntem tamamlandıktan sonra yığına gönderilir. Çağıran tarafında, parametreye obj
bağımsız değişken 0, arg1
bağımsız değişken 1 gibi erişilir.
Bağımsız değişkenler yığına soldan sağa sırayla yerleştirilir. Diğer bir ifadeyle, ilk bağımsız değişken hesaplanır ve yığına, ardından ikinci bağımsız değişkene, sonra da gerekli tüm bağımsız değişkenler yığının üstünde azalan sırada olana kadar üçüncü bağımsız değişkene yerleştirilir. Örnek başvurusu obj
(için callvirt
her zaman gereklidir), kullanıcı tarafından görünen bağımsız değişkenlerden önce gönderilmelidir. İmzanın (meta veri belirtecinde taşınan) bu işaretçi için parametre listesinde bir girdi içermesi gerekmez.
Bir sanal yöntemin yönerge kullanılarak Call da çağrılabileceğini unutmayın.
MissingMethodException belirtilen ada ve imzaya sahip statik olmayan bir yöntem ile obj
ilişkili sınıfta veya temel sınıflarından herhangi birinde bulunamazsa oluşturulur. Bu durum genellikle Microsoft Ara Dil (MSIL) yönergeleri çalışma zamanında değil yerel koda dönüştürüldüğünde algılanır.
NullReferenceException , obj null ise oluşturulur.
SecurityException sistem güvenliği çağırana çağrılan yönteme erişim vermezse oluşturulur. Güvenlik denetimi, CIL çalışma zamanında değil yerel koda dönüştürüldüğünde oluşabilir.
Not
Değer türlerinde System.Object yöntemlerini çağırırken yönergeyle constrained
birlikte ön ekini callvirt
kullanmayı göz önünde bulundurun. Bu, değer türünün yöntemi geçersiz kılıp geçersiz kılmadığına bağlı olarak farklı IL yayma gereksinimini ortadan kaldırarak olası bir sürüm oluşturma sorununu önler. Arabirim yöntemini uygulayan değer türü yöntemi kullanılarak MethodImpl
değiştirilebileceği için, değer türlerinde arabirim yöntemlerini çağırırken ön ekini kullanmayı constrained
göz önünde bulundurun. Bu sorunlar, opcode'da Constrained daha ayrıntılı olarak açıklanmıştır.
Aşağıdaki Emit yöntem aşırı yüklemesi opcode'unu callvirt
kullanabilir: