解析如何使用反射调用类型成员 方法,字段,属性
解析如何使用反射调用类型成员 方法,字段,属性
发布时间:2016-12-28 来源:查字典编辑
摘要:如下所示:复制代码代码如下: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#教程学习
热门C#教程学习
编程开发子分类