Type.GetType()与 typeof跨程序集反射
2016-05-17 10:10
120 查看
原博地址:http://www.cnblogs.com/hyl8218/archive/2010/02/19/1667440.html
上一篇的热更新还不够完善,所以另外查了下相关资料,准备做一个完整的热更新系统。
在开发中,经常会遇到这种情况,在程序集A.dll中需要反射程序集B.dll中的类型。如果使用稍有不慎,就会产生运行时错误。例如使用Type.GetType("BNameSpace.ClassName")在程序集A.dll获取程序集B.dll中的类型,就会返回Null。
关于跨程序集的反射,有两点需要注意:
1、如果使用typeof,编译能通过,则跨程序集的反射一定可以正常运行。可以说,typeof是支持强类型的。比如
1 Type supType = typeof(BNameSpace.SubSpace.Class);
如果当前程序集没有添加对EnterpriseServerBase.dll的引用,则编译会报错。
2、如果使用Type.GetType来进行反射的话,情况就复杂些。这是因为Type.GetType是非强类型的。Type.GetType的参数是一个string为类型的完全限定名,如果当string表示的目标类型不在当前程序集中,则运行时Type.GetType会返回null。解决的办法是:首先加载目标程序集,然后再使用Assembly.GetType方法来获取类型。如
1 Assembly asmb = Assembly.LoadFrom("EnterpriseServerBase.dll") ;
2 Type supType = asmb.GetType("EnterpriseServerBase.DataAccess.IDBAccesser") ;
注意,当使用Type.GetType的时候,即使你添加了对EnterpriseServerBase.dll的引用,Type.GetType("EnterpriseServerBase.DataAccess.IDBAccesser")也会返回null,这是因为Type.GetType只会在当前程序集中进行类型搜索!
上一篇的热更新还不够完善,所以另外查了下相关资料,准备做一个完整的热更新系统。
在开发中,经常会遇到这种情况,在程序集A.dll中需要反射程序集B.dll中的类型。如果使用稍有不慎,就会产生运行时错误。例如使用Type.GetType("BNameSpace.ClassName")在程序集A.dll获取程序集B.dll中的类型,就会返回Null。
关于跨程序集的反射,有两点需要注意:
1、如果使用typeof,编译能通过,则跨程序集的反射一定可以正常运行。可以说,typeof是支持强类型的。比如
1 Type supType = typeof(BNameSpace.SubSpace.Class);
如果当前程序集没有添加对EnterpriseServerBase.dll的引用,则编译会报错。
2、如果使用Type.GetType来进行反射的话,情况就复杂些。这是因为Type.GetType是非强类型的。Type.GetType的参数是一个string为类型的完全限定名,如果当string表示的目标类型不在当前程序集中,则运行时Type.GetType会返回null。解决的办法是:首先加载目标程序集,然后再使用Assembly.GetType方法来获取类型。如
1 Assembly asmb = Assembly.LoadFrom("EnterpriseServerBase.dll") ;
2 Type supType = asmb.GetType("EnterpriseServerBase.DataAccess.IDBAccesser") ;
注意,当使用Type.GetType的时候,即使你添加了对EnterpriseServerBase.dll的引用,Type.GetType("EnterpriseServerBase.DataAccess.IDBAccesser")也会返回null,这是因为Type.GetType只会在当前程序集中进行类型搜索!
相关文章推荐
- mac pro 笔记本电脑 外接显示器 无图像 / 不显示
- 自定义滚动条
- Android布局-LinearLayout属性详解
- java 数字的内部表示
- 度量快速开发平台分页构建介绍
- eclipse中properties文件编码问题
- Ubuntu常用终端快捷键
- 代理协议委托一句话说明
- iOS开发-常用第三方开源框架介绍
- iOS性能优化:Instruments使用实战
- SQL Server With 递归 日期 循环
- 【创建型】Abstract Factory模式 & Factory Method模式
- php语法
- 文本文件比对
- 不管在任何行业,进攻才是最好的防守
- 获取广告标识符ifad
- string怎么转换为char*
- js实现导航菜单点击切换选中时高亮状态
- MySQL 5.1.72安装
- Android自动化测试