Reflection kütüphanesini kullanarak dinamik metot çağrısı yapabilmemiz mümkündür. Geri dönüş tipi void olan ve parametre almayan static bir metot yazalım ve dinamik olarak çağırmaya çalışalım.

class Program

    {

        static void Main(string[] args)

        {          

 

            Console.Write("Metot adı yazınız : ");

            string metotAdi = Console.ReadLine();

            MethodInfo mi = typeof(Program).GetMethod(metotAdi, BindingFlags.Static | BindingFlags.NonPublic);

            mi.Invoke(null, null);

        }

 

        static void DinamikMetot()

        {

            Console.WriteLine("Ben dinamik olarak çalıştırıldım.");

        }

     }

Programı çalıştıralım ve ekranda metodumuzun adını yazarak enter’a basalım.

image

image

Gördüğünüz gibi metot dinamik olarak çalıştırılmış durumda. Yaptığımız işlem çok basit bir reflection işlemidir aslında. Dinamik olarak Program tipinin metotlarını elde ediyoruz, metot ismi olarak ise çalışma anında kullanıcı tarafından girilen bilgiyi parametre olarak veriyoruz. BindingFlags enum’ı ile verilen parametreler ile de metodun static ve private olduğunu belirtiyoruz. Daha sonra da invoke ederek gerekli parametreleri gönderiyoruz.

Şimdi de DinamikTopla adında bir metot yazalım. Metodun geri dönüş tipi void olsun ve 2 adet integer tipinden parametre alarak toplamlarını ekrana yazdırsın.

class Program

    {

        static void Main(string[] args)

        {

            Console.Write("Metot adı yazınız : ");

            string metotAdi = Console.ReadLine();

           

            MethodInfo mi = typeof(Program).GetMethod(metotAdi, BindingFlags.Static | BindingFlags.NonPublic);

           

            Console.Write("Birinci parametre : ");

            int p1 = int.Parse(Console.ReadLine());

           

            Console.Write("İkinci parametre : ");

            int p2 = int.Parse(Console.ReadLine());

           

            mi.Invoke(null, new object[] { p1, p2 });

        }

 

        static void DinamikTopla(int a, int b)

        {

            Console.WriteLine("DinamikTopla metodu çalıştı! Toplam = {0}", a + b);

        }

     }

Programı çalıştıralım ve istenen değerleri ekranda vererek sonucu elde edelim.

image

image

image

image



0 yorum:

Yorum Gönder