09 December 2016

Reflection Konusu

Reflection namespace’i ve bu namespace’e ait sınıflar .Net’te herhangi bir tipe ait üyelerin neler olduğunu anlayabilmek için kullanılır. Öncelikle üyelerini öğrenmek istediğimiz tipi Type değişkeni olarak alırız. Daha sonra Reflection namespace altındaki metod ve sınıfları kullanarak o tiple ilgili bilgileri elde ederiz.

Örnek:

Type t = typeof(System.String); // Öncelikle String sınıfının tipini öğreniyoruz. 
 MemberInfo[] memberList = t.GetMembers(); //System.String tipi içinde yer alana üyelerin listesini Reflection namespacesinde yer alan, MemberInfo sinifi tipinden bir diziye aktarıyoruz. 
 foreach (MemberInfo m in memberList) //Döngü ile MemberInfo dizininde yer alan üyelerin birtakim bilgilerini ekrana yazıyoruz.
 {
 Console.WriteLine(m.Name);
 }
for (int i = 0; i < memberList.Length; i++) //Length özelliği, MemeberInfo tipindeki dizimizde yer alan üyelerin sayısını veriyor.
 {
 Console.WriteLine("Üye Adı: {0} Üye tipi: {1}", memberList[i].Name, memberList[i].MemberType);
 }
MethodInfo[] metodlar = t.GetMethods();
 Console.WriteLine(t.Name + "Metod Sayısı: {0}", metodlar.Length);
 for (int i = 0; i < metodlar.Length; i++)
 {
 Console.WriteLine("Method adı: {0} Dönüş tipi: {1}", metodlar[i].Name,metodlar[i].ReturnType);
 ParameterInfo[] parametreler = metodlar[i].GetParameters();
 for (int j = 0; j < parametreler.Length; j++)
 {
 Console.WriteLine("parametre Adı: {0} Parametre tipi:{1}", parametreler[j].Name, parametreler[j].ParameterType);
}
 Console.WriteLine("---------------------------------------");
 }

Yukarıdaki örnekte MemberInfo, MethodInfo, ParameterInfo Reflection sınıflarını kullandık. Kullanabileceğimiz diğer sınıflar:

ConstructorInfo Tipe ait yapıcı metod üyelerini ve bu üyelere ait bilgilerini içerir.

EventInfo Tipe ait olayları ve bu olaylara ait bilgileri içerir.

MethodInfo Tipe ait metodları ve bu metodlara ait bilgileri içerir.

FieldInfo Tip içinde kullanılan alanları ve bu alanlara ilişkin bilgileri içerir.

ParameterInfo Tip içinde kullanılan parametreleri ve bu parametrelere ait bilgileri içerir.

PropertyInfo Tip içinde kullanılan özellikleri ve bu özelliklere ait bilgileri içerir.