Tag: reflection


Reflection da Method Çalıştırıken Out ve Ref Parametreleri

January 30th, 2009 — 7:32am

Reflection ile out parametreli bir methodu çalıştırmak için ParameterModifier dizisi kullanmamız gerekiyor. (1 method için 1 uzunluklu bir dizi oluşturup. 2 parametre için de dizinin elemanına 2 elemanlı bir diziymiş gibi davranıp true değerini verebiliriz. bi türlü dile getiremedim :P)

true ref ve out için veriliyor, false da normal parametreler için.

Parametrelerin türünü belirtirken Type.GetType metoduna string olarak uzun adını yazıp sonuna da bir & işareti koyuyoruz. Bu işarette ref veya out olduğunu belirtmenizi sağlıyor.

string reflecting = "";
string something = "";
 
Assembly asm = Assembly.LoadFile(
          string.Format(@"{0}\Deneme.dll",Environment.CurrentDirectory));
Object pro = asm.CreateInstance("Deneme.Test");
 
ParameterModifier[] arrPmods = new ParameterModifier[1];
arrPmods[0] = new ParameterModifier(2);
arrPmods[0][0] = true; // out için true
arrPmods[0][1] = true; 
 
System.Type[] arrTypes = new System.Type[3];
//ref ve out parametreleri için & işareti anahtar mevzu
arrTypes.SetValue(Type.GetType("System.String&"), 0);
arrTypes.SetValue(Type.GetType("System.String&"), 1);
 
object[] prms = new object[] { reflecting, something };
 
pro.GetType().GetMethod("Topla", arrTypes, arrPmods).Invoke(pro, prms);
 
Console.WriteLine(string.Format("değer 1:{0}", prms[0]));
Console.WriteLine(string.Format("değer 2:{0}", prms[1]));
 
Console.ReadLine();
  • Facebook
  • Twitter
  • StumbleUpon
  • del.icio.us
  • Digg

Comment » | Csharp - C#

Reflecting Something

January 21st, 2009 — 7:17am

Reflection ile bir dll in içindeki method ve property’lere erişmeyi gösteren küçük bir örnek…

Önce Activator.CreateInstance ile nesnenin örneğini oluşturuyoruz, sonra GetProperty ile özelliği alıp SetValue ile de değeri veriyoruz…

GetMethod().Invoke() ile de class’ın içinden bir metodu çalıştırabiliriz…

 
BaseReport rpt = Activator.CreateInstance(Type.GetType("ReportClass")) as BaseReport;
 
rpt.GetType().GetProperty("Paremetre").SetValue(rpt, "Ankara", null);
 
rpt.GetType().GetMethod("Work").Invoke(rpt, new object[] { "Parametre" });

msdn
code guru
csharp nedir?

  • Facebook
  • Twitter
  • StumbleUpon
  • del.icio.us
  • Digg

Comment » | Csharp - C#

Back to top