Ana Sayfa Microsoft .NETC# Bir Class İçerisindeki Methodları Dinamik Olarak Çağırmak (Reflection – Invoke İşlemi)

Bir Class İçerisindeki Methodları Dinamik Olarak Çağırmak (Reflection – Invoke İşlemi)

by Sinan BOZKUŞ
7.228 kez okundu

reflection

ir class içerisinde bulunan bir methodu veya o class içerisindeki tüm methodları duruma göre dinamik olarak çağırmak isteyebiliriz. Bu işlem için bir çok farklı yol izleyebiliriz.

Örneğimizde elimizde methodlarımızın bulunduğu bir Functions.cs classımımız var. İçeriği toplam 5 method’dan oluşuyor ve bu methodlar içerisindeki string ifadeleri geriye döndürecek yapıdadır. UI (kullanıcı arayüzü) tarafında ise bu methodlardan dönen değerleri bir listbox içerisinde yazdıracağız.

Öncelik olarak Function.cs dosyamı oluşturuyorum ve içerisine rastgele methodlarımı yazıyorum;

[csharp]
class Functions
{
public string Function1()
{
return "Function1";
}

public string Function2()
{
return "Function2";
}

public string Function3()
{
return "Function3";
}
[/csharp]

Öncelik olarak hangi class üzerinden dinamik olarak ulaşmak istiyorsak bulunduğumuz class içerisine System.Reflection kütüphanesini çağırmamız gerekiyor.

[csharp]using System.Reflection;[/csharp]

Kütüphanemizi ekledikten sonra methodlardan dönen verileri tek tek listbox’a ekleyeceğiz.

[csharp]
// Methodlarımız hangi class’ın içerisindeyse kullanacağımız class’ın instance’ını alarak ram üzerinde oluşturuyoruz.
Functions fn = new Functions();

// Functions class’ı içerisindeki tüm methodlara ulaşıp MethodInfo tipinde dizi olarak tutuyoruz.
MethodInfo[] methods = typeof(Functions).GetMethods();

// Methodları çalıştırabilmek için tüm methodların içerisinde (method dizimizde) foreach ile dönüyoruz.
foreach (MethodInfo item in methods)
{
// Kullanmak istediğimiz methodlar "Function" ile başladığından filtreleme işlemi uyguluyoruz.
if(item.Name.Contains("Function"))
listBox1.Items.Add(item.Invoke(fn, null) as string); // Invoke kullanarak ilgili methodu dinamik olarak çalıştırıyoruz.
}
[/csharp]

Eğer sadece belirli bir methodu çalıştırmak istiyorsanız Contains methodu yerine direk name’i (adı) eşit olacak şekilde düzenleyebilirsiniz. Method’unuz parametre alıyorsa yukarıda null yazdığımız alanda parametreleri gönderebilirsiniz. Parametreleri object dizisi olarak göndermeniz gerekmektedir.

Örneğin methodumuz 2 tane string tipinde değişken alıyor diyelim. Bunun için yukarıda ki null alanına aşağıdaki gibi yazmanız gerekmekte;

[csharp]new object[] { "Buraya 1. parametre gelecektir", "Buraya 2. parametre gelecektir."}[/csharp]

 

Bunlara da bakmak isteyebilirsiniz

Bir Yorum Bırakın