反射的定义
审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等。
System.reflection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码
和反射相关的命名空间(我们就是通过这几个命名空间访问反射信息)
反射的作用:
- 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现 有对象中获取类型
- 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。
- 反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。
头部引用加:
using System.Reflection;
Assembly asm = Assembly.Load("SomeAssembly"); //根据程序集的名字加载程序集,
Assembly asm = Assembly.LoadFrom (@"C:\xx\SomeAssembly.dll"); //程序集的完整路径
//加载dll后,需要使用dll中某类.
Type t = asm.GetType("namespace.classname");//获取类名,必须 命名空间+类名
//实例化类型
object o = Activator.CreateInstance(t);
//得到要调用的某类型的方法
MethodInfo method = t.GetMethod("functionname");//functionname:方法名字
object[] obj =
{
Parameters[0].TaxpayerName,
Parameters[0].TaxpayerTaxCode,
Parameters[0].CAPassword
};
//对方法进行调用
var keyData = method.Invoke(o, obj);//param为方法参数object数组
Myclass my = new Myclass();
Type type = my.GetType(); //通过对象获取这个对象所属类的Type对象
Console.WriteLine(type.Name); //关于类总体的:类名、名字空间、程序集
Console.WriteLine(type.Namespace);
Console.WriteLine(type.Assembly);
FieldInfo[] array = type.GetFields(); //关于类里面的:获取字符
foreach(var temp in array)
{
Console.WriteLine(temp.Name);
}
PropertyInfo[] array = type.GetProperties();//获取属性
foreach(var temp in array)
{
Console.WriteLine(temp.Name);
}
MethodInfo[] array = type.GetMethods(); //获取方法
foreach (var temp in array)
{
Console.WriteLine(temp.Name);
}