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 objiliş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
objgönderilir.aracılığıyla
argNyöntem bağımsız değişkenleriarg1yığına gönderilir.aracılığıyla
argNyöntem bağımsız değişkenleriarg1ve nesne başvurusuobjyığı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öntemineobjaktarı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 callvirther 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 MethodImpldeğ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: