手机
当前位置:查字典教程网 >编程开发 >C#教程 >解析如何使用反射调用类型成员 方法,字段,属性
解析如何使用反射调用类型成员 方法,字段,属性
摘要:如下所示:复制代码代码如下:classProgram{staticvoidMain(string[]args){Typet=typeof(T...

如下所示:

复制代码 代码如下:

class Program

{

static void Main(string[] args)

{

Type t = typeof(Test);

object result;

Test tc =new Test();

Console.WriteLine("Invoke a static method");

t.InvokeMember("Sayhello",BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.Public, null, null, new object[] { });

Console.WriteLine("------------------------");

Console.WriteLine("Invoke a generic method");

List<string> list = new List<string>();

list.Add("GuoHu");

list.Add("LeiHu");

//We should assign the parameter type to generic method By using MakeGenericMethod

MethodInfo mi = t.GetMethod("Print").MakeGenericMethod(typeof(string));

mi.Invoke(null, new object[] { list });

Console.WriteLine("------------------------");

Console.WriteLine("Invoke a instance method");

MethodInfo m = t.GetMethod("Swap");

object[] obj = new object[2];

obj[0] = 123;

obj[1] = 230;

m.Invoke(new Test(), obj);

Console.WriteLine("{0},{1}", obj[0], obj[1]);

Console.WriteLine("------------------------");

Console.WriteLine("output field name");

FieldInfo[] fi = t.GetFields();

foreach (FieldInfo name in fi)

{

Console.WriteLine("{0}",name);

}

Console.WriteLine("------------------------");

Console.WriteLine("Invoke a method with named parameters");

object[] argValues = new object[] { "Guo", "Hu" };

String[] argNames = new String[] { "lastName", "firstName" };

t.InvokeMember("PrintName", BindingFlags.InvokeMethod, null, null, argValues, null, null, argNames);

Console.WriteLine("------------------------");

Console.WriteLine("Get a field value");

result = t.InvokeMember("Name", BindingFlags.GetField | BindingFlags.GetProperty, null, tc, new object[] { });

Console.WriteLine("Name == {0}", result);

Console.WriteLine("------------------------");

Console.WriteLine("Set a field value");

t.InvokeMember("Name", BindingFlags.SetField, null, tc, new object[] { "New value" });

result = t.InvokeMember("Name", BindingFlags.GetField | BindingFlags.GetProperty, null, tc, new object[] { });

Console.WriteLine("Name == {0}",result);

}

}

class Test

{

public string Name;

public Test()

{

Name = "Initilize Name";

}

public static void Sayhello()

{

Console.WriteLine("Sayhello");

}

public static void Print<T>(IEnumerable<T> item)

{

foreach (T t in item)

{

Console.WriteLine("{0}", t);

}

}

public static void PrintName(String firstName, String lastName)

{

Console.WriteLine("{0},{1}", lastName, firstName);

}

public void Swap(ref int a, ref int b)

{

int x = a;

a = b;

b = x;

}

}

【解析如何使用反射调用类型成员 方法,字段,属性】相关文章:

C#读写文件的方法汇总

解析如何正确使用SqlConnection的实现方法

解析C#中用Process类杀死进程,执行命令的深入分析

C#注释的一些使用方法浅谈

c#中虚函数的相关使用方法

使用C#开发Socket通讯的方法

基于使用递归推算指定位数的斐波那契数列值的解决方法

C#中一些你可能没用过的调试窗口的方法

C#使用DllImport调用非托管的代码的方法

探讨:如何使用委托,匿名方法对集合进行万能排序

精品推荐
分类导航