اجرای متد از طریق Reflection
نویسنده: سیدمجتبی حسینی
تاریخ: ۱۳۹۱/۰۷/۱۷ ۱۴:۰
آدرس: www.dntips.ir
| مطالب | ۳۶۹۴ |
| نویسندگان | ۲۷۶ |
| گروههای مطالب | ۱۰۲۴ |
| نقشههای راه | ۱۱۹ |
| دورهها | ۱۴ |
| اشتراکها | ۱۷۹۱۴ |
public Object Invoke(Object obj, Object[] parameters)
به مثال زیر که چگونگی این عملیات را شرح میدهد، توجه کنید:
public class TestMath
{
public int Squar(int i)
{
return i*i;
}
}
static void Main(string[] args)
{
Type type = typeof (TestMath);//به دست آوردن نوع کلاس
object obj = Activator.CreateInstance(type);//ساختن نمونهای از نوع مورد نظر
MethodInfo methodInfo = type.GetMethod("Squar");//یافتن اطلاعات متد مورد نظر
Console.WriteLine(methodInfo.Invoke(obj, new object[] { 100 }));// و نمایش نتیجه object[] ارسال عدد 100 به صورت
Console.Read();
}
توجه کنید که دو متد GetMethod و Invoke در فضای نام System.Reflection قرار دارند.
روش دیگر
در شیوه دیگر برای انجام این کار، نیازی به استفاده از GetMethod و Invoke نیست و فراخوانی متد مورد نظر بسیار شبیه فراخوانی عادی متدهاست و نیازی به ساخت متغیر ویژهای از نوع []object برای ارسال پارامترها نیست. برای انجام این کار فقط کافیست نوع متغیری که نوع نمونهسازی شده را نگهمیدارد (در اینجا نمونه ای از کلاس را نگهمیدارد) به صورت dynamic باشد:
static void Main(string[] args)
{
Type type = typeof (TestMath);
dynamic obj = Activator.CreateInstance(type);
Console.WriteLine(obj.Square(100));
Console.Read();
}
class Test
{
public void func1()
{
Console.WriteLine("Hello World!");
}
}Type type = typeof(Test);
dynamic obj = Activator.CreateInstance(type);
Console.WriteLine(obj.func1());Console.WriteLine(obj.func1());
obj.func1();