我创建了这样的类型:
TypeBuilder tb = moduleBuilder.DefineType(myname, TypeAttributes.Class |
TypeAttributes.Public, typeof(BaseClass), new Type[] { typeof(ImyInterface) });
然后大量的未生成的代码用于构造函数,方法等。
当我开始使用该类时,我发现了一些奇怪的东西。我想检查我创建的类型“myname”是否真的实现了ImyInterface。我希望以下两个语句都返回true:
// t is Type 'myName'
Type baseInterface = t.GetInterface(typeof(ImyInterface).name);
if (baseType != null)
{
// this is actually true, as I expected
}
if (typeof(ImyInterface).isAssignableFrom(t))
{
// the if clause is false, but I don't have a clue why??
}
因此,我创建了一个实现ImyInterface的类,但该类无法分配给ImyInterface类型的对象,我缺少什么呢?
顺便说一下,这里没有泛型,接口(interface)只是测试概念的基础:
public interface ITestInterface
{
int CalcSquaredInteger(int number);
}
最佳答案
我终于发现了我所缺少的东西:每当检查在不同项目/程序集中定义的类型和接口(interface)之间的类型兼容性和可分配性时,请确保所有项目均已签名并以强名称命名!否则,GetInterface方法将起作用,因为它只是比较一个名称。但是.net不会在类型之间分配。
关于c# - 为什么IsAssignableFrom和GetInterface给出不同的结果,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/3341378/