.net 高级技术之程序集与反射的使用
源代码被编译成程序集:
c#代码会被编译器编译成程序集。程序集包括资源文件,类型元数据(命名空间,类的成员及类的关系的信息,相当于类的关系表,MSIL代码(程序的执行代码,被装在.exe或者.dll中),程序集元数据(有关程序集的信息)。其中,含有main方法的类被编译成.exe程序集。其他类库被编译成.dll程序集。类库的编译是即时编译,即只有当需要访问类库时,才会将其编译 成.dll程序集。
程序集的使用:
不能将自己定义的类库直接给别人使用,不能让别人看到实现代码,只能给别人类库编译生成的.dll程序集,让其引用程序集,调用类的属性和方法。
就像我们引用系统程序集调用系统类的属性和方法一样。
可通过直接引用和反射的方式来使用程序集:
1 直接引用程序集:
可添加路径并引用(using)程序集。
2通过反射动态加载程序集:
反射:动态加载程序集,通过type类获得程序集的类型信息(类的成员)。
获得type类的三种方式:
通过实例获得type:Type t=实例名.GetType()得到type类的实例,从而得到程序集(类库)信息。
通过类获得:Type t=(typeof)类名
通过程序集获得:Assembly myas=Assembly.LoadFile(path); 加载需要的程序集
Type [] myTypes=myas.GetType(); 获得程序集所有的类型信息
foreach(Type t in myType) 遍历得到每个类的type类
{
System .Reflection .MethodInfo [] mi= t.GetMethods();
for (int i = 0; i < mi.Length; i++)
{
MessageBox.Show(mi[i].Name );
}
}
郑重声明:本站内容如果来自互联网及其他传播媒体,其版权均属原媒体及文章作者所有。转载目的在于传递更多信息及用于网络分享,并不代表本站赞同其观点和对其真实性负责,也不构成任何其他建议。