MethodInfo.Invoke
MethodInfo.Invoke ile dinamik metot çağırmayı öğrenirsin.
MethodInfo.Invoke
MethodInfo.Invoke(obj, args) bir metodu reflection ile çağırır. obj hedef örnektir (statik metotlar için null); args ise object[] olarak argüman listesidir.
Dönüş değeri object? olarak gelir; gerçek tipe dönüştürmek gerekir. Metot adı yalnızca çalışma zamanında biliniyorsa (ör. komut işleyiciler, eklenti sistemleri), GetMethod + Invoke kombinasyonu kullanılır.
Statik metotlar
Statik metotları çağırmak için Invoke'a hedef olarak null verilir: mi.Invoke(null, args). Örnek metotlarda ise gerçek örnek verilmelidir; aksi halde TargetException fırlatılır.
Bu ayrım, statik üyenin sınıf düzeyinde, örnek üyenin ise belirli bir örnek üzerinde çalışmasından kaynaklanır. Eklenti sistemleri genellikle statik giriş noktaları çağırırken, DI kapsayıcılar örnek metotlarını kullanır.
Uygulama Bir metodu Invoke ile çağır
Aşağıdaki Calculator sınıfında MethodInfo mi = typeof(Calculator).GetMethod("Square"); ile metodu al. object result = mi.Invoke(calc, new object[] { 5 }); ile çağır. result değerini Console.WriteLine ile yazdır.
Örnek çözümü göster
MethodInfo mi = typeof(Calculator).GetMethod("Square"); ile metodu al. object result = mi.Invoke(calc, new object[] { 5 }); ile çağır. Console.WriteLine(result); ile sonucu yazdır.
Örnek çözüm:
using System;
using System.Reflection;
class Calculator
{
public int Square(int x) => x * x;
}
class Program
{
static void Main()
{
Calculator calc = new Calculator();
MethodInfo mi = typeof(Calculator).GetMethod("Square");
object result = mi.Invoke(calc, new object[] { 5 });
Console.WriteLine(result);
}
}
Kendini test et
-
Invoke'ın ilk parametresi nedir?
- Metot adı
- Parametre türleri
- Hedef örnek (statik için null)
- Dönüş türü
Cevabı göster
Hedef örnek (statik için null) — Doğru. Invoke'ın ilk parametresi hedef örnektir; statik metotlar için null verilir.
-
Invoke çağrısını tamamla
object result = mi.____(obj, new object[] { 5 });Cevabı göster
object result = mi.Invoke(obj, new object[] { 5 }); -
Parametreyi anlamına eşle
- obj
- Hedef örnek
- null
- Statik için
- new object[] {}
- Boş argüman
- new object[] { 5 }
- Tek argüman