OpCodes.Call Alan

Tanım

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 Dil (MSIL) derleme biçiminin yanı sıra kısa bir başvuru özeti listelenmiştir:

Format Derleme Biçimi Açıklama
28 <T> Çağrı methodDesc tarafından açıklanan yöntemini çağırın methodDesc.

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

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

  2. aracılığıyla arg1 yöntem bağımsız değişkenleri argN 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.

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

yönergesi, call yönergeyle 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 kullanılacak çağırma kuralının yanı sıra bu yönteme geçirilecek yığına yerleştirilmiş bağımsız değişkenlerin numarasını, türünü ve sırası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önergenin önüne hemen 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 bilgi 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 eder; 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 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. Üç önemli özel durum vardır:

  1. Bir örneğe (veya sanal) yapılan çağrılar, kullanıcı tarafından görünen bağımsız değişkenlerden önce bu örnek başvuruyu göndermelidir. Örnek başvurusu null başvuru olmamalıdır. Meta verilerde taşınan imza, işaretçinin parametre listesinde bir girdi içermez; bunun yerine, yöntemin işaretçiyi geçirmeyi this gerektirip gerektirmediğini belirtmek için this bir bit kullanır.

  2. kullanarak call (yerine callvirt) bir sanal yöntemi çağırmak geçerlidir. Bu, yöntemin çağrılan nesneden dinamik olarak belirtilmesi yerine yöntemi tarafından belirtilen sınıf kullanılarak çözümlenmesi gerektiğini gösterir.

  3. Bir temsilcinin Invoke yönteminin veya call yönergesiyle callvirt çağrılabileceğini unutmayın.

SecurityException sistem güvenliği çağırana çağrılan yönteme erişim vermezse oluşturulabilir. Güvenlik denetimi, Microsoft Ara Dil (MSIL) yönergeleri ç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önerge constrained yayma yerine yönergeyle ön ekini callvirt kullanmayı call 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üklemeleri opcode'unu call kullanabilir:

Note

EmitCall yöntemi çağrılar için varargs sağlanır. Normal çağrılar Emit için yöntemini kullanın.

Şunlara uygulanır