1 用工具Ildasm查看dll/exe.
Typedef: 表示定义 - 类的定义
TypeRef: 表示引用,引用其他的类
AssemRef:表示引用其他的assembly
2 System.Reflection namespace
Assembly : 用来加载,操作,探查assembly文件
Assembly Name: 查询assembly的唯一标志,如版本号等
EventInfo
FieldInfo
ParameterInfo
PropertyInfo
以上故名意思,用来查询想对新的信息
MethodInfo:上面4个class的abstract基类
Module: 在多cs的assembly中获取module
3 System.Types
静态函数 public static Type GetType(string name),使用该方法可以得到对应的metadata中的类型,并调用GetMethods/GetMembers等等来得到Assembly中的metadata,如
Type.GetType("ConsoleApplciation1.Manager").GetMethods,可以得到类Manager中的所有方法及类型
非静态函数public Type GetType() 的调用方式
Manager m1 = new Manager()
m1.GetType().GetMethods(),得到上面的相同结果,另一种方式是使用typeof,
Typeof(m1).GetMethods()
利用GetType从其他Assembly中得到类型
Type t = Type.GetType("ClassLibrary.Car,ClassLibrary"),全名,Assembly文件名 。 全名= namespace.classname
4 针对模板类的GetType的使用方法,例如类system.collections.generic.List<T>
Type.GetType("system.collections.generic.List~1"), 数字1表示1个类型
如果两个则为2 , 例如Dictionary<T1,T2>
Type.GetType("system.collections.generic.List~2")
5 类Assembly
声明:
[SeriablizableAttribute]
[ClassInterfaceAttribute(ClassInterfaceType.None)]
[ComVisibleAttribute(true)]
public class Assembly: _Assembly,IEvedenceFactory,ICustomAttributreProvider,ISerializable
作用:
查询Assembly中的Metadata,Type
利用Type创建实例
获取appdomain中加载的所有的Assemblies, AppDomain.GetAssemblies()
利用Assembly类动态加载Assembly
Load: 根据Assembly的dispalyname再程序的同目录下加载,如果是private Assembly则可以只提供名字,shared Assembly则必须提供public token ,如
Assembly.Load("System.Windows.Forms, Version=2.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089")
LoadFrom: 指定加载对象的路径,如"C://DLL/DLL.DLL"
ReflectionOnlyLoad: 使用方法同Load,但是该方法只加载到reflection-only context,而load会加载到execute context, 区别就是load加载的可以创建实例,但是reflectiononlyload加载的不可以,而且该方法不解析要加载assembly的依赖性.及如果Assembly1 依赖Assembly2,那么如果删除了Assembly2后,使用Load加载则生成异常FileLoadException,但是用ReflectOnlyLoad则不会有异常,另一下代码会出错如
Assembly.ReflectionOnlyLoad("ClassLibaray").CreateInstance("Car") //异常
GetExecutingAssembly
得到当前执行程序的Assembly
其他的一些基本方法
public virtual AsseblyName GetName(bool bCopiedName)
得到一个AssemblyName对象,包含Assembly的名称等信息
public virtua object[] GetCustomAttributes(bool inherit)
列出Assembly中的属性
public virtual FileStream[] GetFiles (bool getResourceModule)
提供Assembly manifest列出的文件入口
public virtual string[] GetManifestResourceNames()
Manifest中资源的名称