gpt4 book ai didi

c# - obj.GetType().IsInterface 可以是真的吗?

转载 作者:IT王子 更新时间:2023-10-29 04:21:36 24 4
gpt4 key购买 nike

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

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

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

  • GetType() 将始终返回运行时类型。
  • 具体类型的运行时类型与调用的构造函数匹配。因此,它永远不是接口(interface),因为接口(interface)没有构造函数。
  • 匿名类型不能实现接口(interface)(即使实现了,它们仍然具有匿名类类型)。
  • 实现公共(public)接口(interface)的其他程序集的内部类的实例仍将类作为运行时类型。
  • Using [ComImport, CoClass(typeof(MyClass))] on an interface看起来您可以实例化它,但构造函数调用实际上实例化了引用的类。

我想不出任何其他情况。我是否遗漏了什么,或者我的猜测是否正确?

最佳答案

Can an expression of the form obj.GetType().IsInterface ever be true in a codebase consisting exclusively of C# code?

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

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 的子类这将拦截调用并返回接口(interface)类型。

如果您的意思是“object 中声明的 GetType() 方法的返回值是否会成为接口(interface)类型”——在那种情况下,我怀疑答案是否定的.

关于c# - obj.GetType().IsInterface 可以是真的吗?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25584590/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com