Can obj.GetType().IsInterface be true?

本文关键字:be true IsInterface obj GetType Can | 更新日期: 2023-09-27 18:20:14

在做一些几乎完全无关的事情时,一个问题突然出现在我的脑海中:

在完全由C#代码组成的代码库中,形式为obj.GetType().IsInterface的表达式是否为真

我怀疑答案是否定的,因为:

  • GetType()将始终返回运行时类型
  • 具体类型的运行时类型与调用的构造函数匹配。因此,它从来都不是接口,因为接口没有构造函数
  • 匿名类型无法实现接口(如果实现了接口,它们仍然具有匿名类类型)
  • 实现公共接口的其他程序集的内部类的实例仍将该类作为运行时类型
  • 在接口上使用[ComImport, CoClass(typeof(MyClass))]看起来可以实例化它,但构造函数调用实际上实例化了被引用的类

我想不出其他情况了。我是遗漏了什么,还是我的猜测正确?

Can obj.GetType().IsInterface be true?

在完全由C#代码组成的代码库中,形式为obj.GetType().IsInterface的表达式可能为真吗?

是的,但可能不是你想的那样:

using System;
public class EvilClass
{
    public new Type GetType()
    {
        return typeof(IDisposable);
    }
}
class Test
{
    static void Main()
    {
        EvilClass obj = new EvilClass();
        Console.WriteLine(obj.GetType().IsInterface); // True
    }
}

稍微类似的是,我相信您可以创建RealProxy的子类,它将拦截调用并返回接口类型。

如果你的意思是"object中声明的GetType()方法的返回值会是接口类型吗?"-在这种情况下,我怀疑答案是否定的。