c#中的Reflection

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中资源的名称


 

 

 

 

 

 

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值