CodeBlanks Logo Icon CodeBlanks

MethodInfo.Invoke

C# kursu · İleri seviye · Ders 46/83

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

  1. 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.

  2. Invoke çağrısını tamamla

    object result = mi.____(obj, new object[] { 5 });
    Cevabı göster
    object result = mi.Invoke(obj, new object[] { 5 });
  3. Parametreyi anlamına eşle

    obj
    Hedef örnek
    null
    Statik için
    new object[] {}
    Boş argüman
    new object[] { 5 }
    Tek argüman

İleri seviye bölümündeki tüm dersler