我创建了这样的类型:

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/

10-11 08:07