【发布时间】:2010-07-05 11:06:37
【问题描述】:
我在一个项目 (MyProject) 中有一段代码,其中包含来自引用程序集的早期绑定对象(我们将其称为 CommonAssembly):
Dim myObject As CommonAssembly.MyEarlyBoundType
现在我有另一个动态加载的程序集,因为它并不存在于所有项目中:
Dim myLateBoundObject As Object = AppDomain.CurrentDomain.CreateInstanceAndUnwrap("Utils", "Utils.MyLateBoundType")
MyLateBoundType 派生自 CommonAssembly.MyEarlyBoundType,我想将 myObject 强制转换为 myLateBoundObject,然后以编程方式调用其他成员方法 通过反射。 我原以为通过提取 myLateBoundOject 的类型并将 myObject 转换为 myLateBoundObject ,这是可行的,但是 CType() 和 DirectCast() 方法都不会接受提取的类型,理由是“关键字没有命名类型”错误:
myLateBoundObject = DirectCast(myObject, GetType(myLateBoundObject))
我不完全确定为什么动态加载的类型不能用于 DirectCast(很确定它不是类型安全检查?)方法,因为如果 Utils.MyLateBoundType 在“MyPrjoect”中被引用,我可以执行:
myLateBoundObject = DirectCast(myObject, Utils.MyLateBoundType)
没有任何问题 - 但这不是动态解决方案。
有什么建议吗?
干杯,
嗯。
【问题讨论】:
标签: vb.net reflection assemblies casting