c# - 反射的使用

反射的定义

审查元数据并收集关于它的类型信息的能力。元数据(编译以后的最基本数据单元)就是一大堆的表,当编译程序集或者模块时,编译器会创建一个类定义表,一个字段定义表,和一个方法定义表等。
System.reflection命名空间包含的几个类,允许你反射(解析)这些元数据表的代码
和反射相关的命名空间(我们就是通过这几个命名空间访问反射信息)

反射的作用:
  1. 可以使用反射动态地创建类型的实例,将类型绑定到现有对象,或从现 有对象中获取类型
  2. 应用程序需要在运行时从某个特定的程序集中载入一个特定的类型,以便实现某个任务时可以用到反射。
  3. 反射主要应用与类库,这些类库需要知道一个类型的定义,以便提供更多的功能。

头部引用加:

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);
} 
发布了50 篇原创文章 · 获赞 864 · 访问量 3万+

猜你喜欢

转载自blog.csdn.net/qq_28299311/article/details/103041427
今日推荐