在做一些几乎完全无关紧要的事情时,我脑子里浮现出一个问题:
在仅由C#代码组成的代码库中,obj.GetType().IsInterface
形式的表达式是否真实?
我怀疑答案是否定的,因为:
GetType()
将始终返回运行时类型。[ComImport, CoClass(typeof(MyClass))]
on an interface使您看起来可以实例化它,但构造函数调用实际上实例化了引用的类。我无法想到任何其他情况。我错过了什么,或者我猜错了吗?
答案 0 :(得分:38)
在仅由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
的子类来拦截调用并返回一个接口类型。
如果您的意思是" GetType()
中声明的object
方法的返回值是否为接口类型" - 在这种情况下,我怀疑答案是否定的。