【发布时间】:2011-12-29 09:58:09
【问题描述】:
我有一个程序集,其中包含继承自 ToBeProcessed 的类 RD_ToBeProcessed。这些类位于单独的程序集中。
我使用 createInstance 加载一个对象,然后尝试使用以下代码对其进行转换:
private Type tbpType = null;
public ToBeProcessed getToBeProcessedObject(string data)
{
// The data is passed in so that the fields are populated with the
// correct data.
if (tbpType==null){
Assembly assembly =
Assembly.LoadFrom("c:\\project\\RD_ToBeProcessed.dll");
tbpType = assembly.GetType("myNameSpace.RD_ToBeProcessed");
}
Object tbp = Activator.CreateInstance(tbpType,data);
// This line throws an error
return (ToBeProcessed)tbp;
}
这是重复的问题 .NET: Unable to cast object to interface it implements 但不知道怎么解决。
抛出的错误是
无法将“myNameSpace.RD_ToBeProcessed”类型的对象转换为“myNameSpace.ToBeProcessed”类型。
接受的答案表明问题出在基础程序集的 2 个不同版本上。但我使用了 ILSpy 和应用程序目录中的 ToBeProcessed dll,以及与 RD_ToBeProcessed 报告位于同一目录中的 dll:
待处理,版本=1.0.4336.31676,文化=中性,PublicKeyToken=null
所以我不确定我做错了什么。我应该将 ToBeProcessed 更改为应用程序和插件中使用的接口(ItoBeProcessed)吗?然后有一个单独的程序集来保存基础 ToBeProcessed 类,该类根本不会被应用程序引用(只是 by 插件)?
编辑:问题已通过使用接口类解决。我仍然不知道出了什么问题,但 Kol 的回答表明,理论上这应该可以正常工作。
【问题讨论】:
标签: c# casting createinstance