OpCodes.Call 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.
Geçirilen yöntem tanımlayıcısı tarafından belirtilen yöntemini çağırır.
public: static initonly System::Reflection::Emit::OpCode Call;
public static readonly System.Reflection.Emit.OpCode Call;
staticval mutable Call : System.Reflection.Emit.OpCode
Public Shared ReadOnly Call As OpCode
Alan Değeri
Açıklamalar
Aşağıdaki tabloda yönergenin onaltılık ve Microsoft Ara Dili (MSIL) derleme biçimi ve kısa başvuru özeti listelenmiştir:
Biçimlendir | Derleme Biçimi | Description |
---|---|---|
28 <T > |
Çağrı methodDesc |
tarafından methodDesc açıklanan yöntemini çağırın. |
Sıralı sırada yığın geçiş davranışı şu şekildedir:
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
yığından çıkarılır; yöntem çağrısı bu bağımsız değişkenlerle gerçekleştirilir ve denetim yöntem tanımlayıcısı tarafından başvuruda bulunılan yönteme 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, call
yönergesi ile geçirilen yöntem tanımlayıcısı tarafından belirtilen yöntemi çağırır. Yöntem tanımlayıcısı, çağrılacak yöntemi ve bu yönteme geçirilecek yığına yerleştirilen bağımsız değişkenlerin numarasını, türünü ve sırasını ve kullanılacak çağırma kuralını gösteren bir meta veri belirtecidir. Denetimi call
aktarmadan önce geçerli yöntem durumunun serbest bırakılacağını belirtmek için yönergeden hemen önce bir tail
(Tailcall) ön ek yönergesi eklenebilir. Çağrı denetimi kaynak yönteminden daha yüksek bir güven yöntemine aktarırsa yığın çerçevesi serbest bırakılmaz. Bunun yerine yürütme, sağlanmamış gibi tail
sessizce devam eder. Meta veri belirteci, çağrının statik bir yönteme mi, örnek yöntemine mi, sanal yönteme mi yoksa genel bir işleve mi olduğunu belirlemek için yeterli bilgileri taşır. Tüm bu durumlarda hedef adres tamamen yöntem tanımlayıcısından belirlenir (bunu sanal yöntemleri çağırma yönergesiyle Callvirt karşıtlık edin; burada hedef adres, öncesinde gönderilen örnek başvurusunun çalışma zamanı türüne Callvirtde bağlıdır).
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, ardından ikinci bağımsız değişkene, sonra da gerekli tüm bağımsız değişkenler azalan sırada yığının üstüne gelene kadar üçüncü bağımsız değişkene yerleştirilir. Üç önemli özel durum vardır:
Bir örneğe (veya sanal) yapılan çağrıların, kullanıcı tarafından görünen bağımsız değişkenlerden önce bu örnek başvuruyu göndermesi gerekir. Örnek başvurusu null başvuru olmamalıdır. Meta verilerde taşınan imza, işaretçinin
this
parametre listesinde bir giriş içermez; bunun yerine, yöntemin işaretçiyi geçirmeyithis
gerektirip gerektirmediğini belirtmek için bir bit kullanır.kullanarak
call
(yerinecallvirt
) bir sanal yöntemi çağırmak geçerlidir. Bu, yönteminin çağrılan nesneden dinamik olarak belirtildiği gibi değil yöntemi tarafından belirtilen sınıf kullanılarak çözümlendiğini gösterir.Bir temsilcinin
Invoke
yönteminin veyacallvirt
yönergesiylecall
çağrılabileceğini unutmayın.
SecurityException sistem güvenliği çağırana çağrılan yönteme erişim vermezse oluşturulabilir. Microsoft Ara Dil (MSIL) yönergeleri çalışma zamanında değil yerel koda dönüştürüldüğünde güvenlik denetimi gerçekleşebilir.
Not
Değer türlerinde System.Object yöntemlerini çağırırken, yönerge call
yayma yerine yönergeyle callvirt
ön ekini kullanmayı constrained
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 eki 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üklemeleri opcode'unu call
kullanabilir: