Aracılığıyla paylaş


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 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 methodDescaçıklanan yöntemini çağırın.

Sıralı sırada yığın geçiş davranışı şu şekildedir:

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

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

  1. 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çirmeyi this gerektirip gerektirmediğini belirtmek için bir bit kullanır.

  2. kullanarak call (yerine callvirt) 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.

  3. Bir temsilcinin Invoke yönteminin veya callvirt yönergesiyle call ç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 MethodImpldeğ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:

Not

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