首页 >后端开发 >C++ >如何确定一个类是否继承自 .NET 中的泛型类?

如何确定一个类是否继承自 .NET 中的泛型类?

DDD
DDD原创
2025-01-24 18:51:10930浏览

How Can I Determine if a Class Inherits from a Generic Class in .NET?

>识别来自.net 的通用类的继承

.NET的继承机制允许类扩展基类的功能。 确定继承时,通用类添加了一层复杂性,尤其是在处理

>对象时。 当基类是通用的时,标准Type的方法不够。IsSubclassOf>

挑战:

考虑此示例:

<code class="language-csharp">public class GenericClass<T> : IGenericInterface<T> { }

public class TestClass : GenericClass<string> { }</code>
仅检查

>是因为typeof(TestClass).IsSubclassOf(typeof(GenericClass<string>))是一种封闭的通用类型,而不是通用类型的定义。 typeof(GenericClass<string>)

解决方案:

以下辅助函数有效地确定类型是否从

raw

的通用类型定义:>

此函数通过>的基本类型迭代,直到达到
<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type genericType, Type toCheck) {
    while (toCheck != null && toCheck != typeof(object)) {
        Type currentType = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
        if (genericType == currentType) {
            return true;
        }
        toCheck = toCheck.BaseType;
    }
    return false;
}</code>
。对于每种类型,它检查是否是通用类型。如果是这样,它将使用

获得通用类型定义。 然后,该功能将此原始的通用类型定义与提供的toCheck进行比较。 一场比赛证实了从原始通用类型的继承。object> GetGenericTypeDefinition()这种方法正确地识别了从通用类中的继承,在这种情况下克服了标准genericType方法的局限性。 您可以使用此函数可靠地确定a

对象是否表示从特定通用类派生的类。

以上是如何确定一个类是否继承自 .NET 中的泛型类?的详细内容。更多信息请关注PHP中文网其他相关文章!

声明:
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn