OpCodes.Callvirt Alan

Tanım

Dönüş değerini değerlendirme yığınına göndererek 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:

Format Derleme Biçimi Açıklama
6F <T> Callvirt method ile objilişkili belirli bir yöntemi çağırır.

Sıralı sırada yığın geçiş davranışı şöyledir:

  1. Nesne başvurusu obj yığına gönderilir.

  2. aracılığıyla arg1 yöntem bağımsız değişkenleri argN yığına gönderilir.

  3. aracılığıyla arg1 yöntem bağımsız değişkenleri argN ve nesne başvurusu obj yığından çıkarılır; yöntem çağrısı bu bağımsız değişkenlerle gerçekleştirilir ve denetim yöntemi meta veri belirteci tarafından başvuruda bulunarak yöntemine obj aktarılır. Tamamlandığında, çağıran yöntemi tarafından bir dönüş değeri oluşturulur ve çağırana gönderilir.

  4. Dönüş değeri yığına gönderilir.

yönergesi 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önergenin önüne hemen 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ıftı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ırada yerleştirilir. Diğer bir ifadeyle, ilk bağımsız değişken hesaplanır ve yığına yerleştirilir, sonra ikinci bağımsız değişken, sonra da gerekli tüm bağımsız değişkenler azalan sırada yığının üstünde olana kadar üçüncü bağımsız değişkendir. Örnek başvurusu obj (her zaman için callvirtgereklidir) 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 ad 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 olduğunda 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.

Note

Değer türlerinde System.Object yöntemlerini çağırırken yönergeyle constrained birlikte callvirt ön eki 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 constraineddeğiştirilebileceği için, değer türlerinde arabirim yöntemlerini çağırırken ön ekini kullanmayı MethodImpl 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:

Şunlara uygulanır