by

C#’ta Reflection – 2

Geçen yazımda Reflection’a dair temel bilgileri ve ismini bilmediğimiz bir metodu nasıl çağıracağımızı öğrenmiştik. Bu yazımda ise C#’ta yazılmış bir DLL dosyasının içindeki sınıflara nasıl erişiriz , bu sınıflardan nasıl nesneler oluşturabiliriz onlardan bahsedeceğim. (Tabi ki tüm bunlar çalışma zamanında olacak)

Bu DLL dosyası içinde bulunan sınıfın constructor ına  erişerek nesne yaratmam için aşağıdaki kodu kullanıyoruz.

//DLL dosyasının yüklenmesi Assembly asm = Assembly.LoadFile(@”C:\Ornek.dll”); object obj; //DLL dosyası içindeki sınıf bilgilerinin elde edilmesi foreach (Type type in asm.GetTypes()) { //Sınıflara ait constructor bilgilerinin elde edilmesi foreach (ConstructorInfo cInfo in type.GetConstructors()) { // Constructor ın aldığı parametre tipine göre // o tipten parametre kullanılarak nesne // yaratılması if (cInfo.GetParameters()[0].ParameterType == Type.GetType(“System.Int32”)) { obj = Activator.CreateInstance(type, 3); } else if (cInfo.GetParameters()[0].ParameterType == Type.GetType(“System.String”)) { obj = Activator.CreateInstance(type, “deneme”); } } }

* Dipnot=  Bu kodu yazarken varsayım olarak constructor’ın tek bir parametre aldığını varsaydık ve bu aldığı parametrenin tipi *Int32* veya *String* ise nesnenin yaratılmasını istedik.