gpt4 book ai didi

.net - Type.GetInterface 和嵌套类型

转载 作者:行者123 更新时间:2023-12-02 07:56:50 24 4
gpt4 key购买 nike

我刚刚发现 Type.GetInterface 和嵌套类型有一个非常奇怪的行为。

以下示例代码将显示问题,我正在使用接口(interface)的 Type.FullName 来检查给定类型是否派生自该接口(interface):

public interface IStandardInterface {}
public class StandardClass : IStandardInterface {}

class Program
{
public interface INestedInterface {}
public class NestedClass : INestedInterface { }

static void Main()
{
var stdIfName = typeof (IStandardInterface).FullName;
var nestedIfName = typeof (INestedInterface).FullName;

var std = typeof(StandardClass).GetInterface(stdIfName);
var nested = typeof(NestedClass).GetInterface(nestedIfName);
}
}

如果我执行上面的代码,它适用于 StandardClass 但不适用于 NestedClass。

  • std 的值为 typeof(IStandardInterface)
  • 嵌套的值为空

这种行为是预期的还是错误?如果是预期的,您能解释一下原因吗?

我使用 .net Framework 版本 3.5 SP1。

最佳答案

扩展马克的回答。

虽然没有记录,但 GetInterface API 会根据最后一个“.”的位置拆分您传入的名称。在名字里。 “.”右边的所有内容。将被假定为相关接口(interface)的简称。

这给嵌套类型带来了问题,因为它们的名称是“ContainingTypeName+NestedTypeName”。因此,当您将全名传递给 GetInterface 时,它​​实际上最终会查找名为“Program+INestedInterface”的接口(interface),但它找不到。

关于.net - Type.GetInterface 和嵌套类型,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/528546/

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