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 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:
aracılığıyla
arg1yöntem bağımsız değişkenleriargNyığına gönderilir.aracılığıyla
arg1yöntem bağımsız değişkenleriargNyığı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ö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:
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
thisgerektirip gerektirmediğini belirtmek içinthisbir bit kullanır.kullanarak
call(yerinecallvirt) 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.Bir temsilcinin
Invokeyönteminin veyacallyönergesiylecallvirtç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: