手机
当前位置:查字典教程网 >编程开发 >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# 批处理调用方法

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

c#中SAPI使用总结——SpVoice的使用方法

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

解析C#中如何把控件的边框角画为圆弧

如何利用反射构建元数据查看器

C# DataSet的内容写成XML时如何格式化字段数据

c# 引用类型和值类型

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

解析C#自定义控件的制作与使用实例的详解

精品推荐
分类导航