首页 > 后端开发 > C++ > 如何确定类型是否从C#中的通用基类继承?

如何确定类型是否从C#中的通用基类继承?

Patricia Arquette
发布: 2025-01-24 19:06:10
原创
592 人浏览过

How Can I Determine if a Type Inherits from a Generic Base Class in C#?

检测C#中类型是否继承自泛型基类

在编程中,确定类之间的关系(特别是涉及继承时)通常是必要的。然而,当处理具有类型参数的泛型类时,通过标准方法验证继承可能会很困难。

问题:

假设您有以下泛型类和派生类:

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

public class Test : GenericClass<SomeType>
{
}</code>
登录后复制

您想检查给定的Type对象(例如,typeof(Test))是否表示继承自GenericClass的类型。但是,使用typeof(Test).IsSubclassOf(typeof(GenericClass))会失败,因为它没有考虑泛型类型参数。

解决方案:

为了解决这个问题,您可以使用以下代码来确定类型是否派生自泛型基类:

<code class="language-csharp">static bool IsSubclassOfRawGeneric(Type generic, Type toCheck) {
    while (toCheck != null && toCheck != typeof(object)) {
        var cur = toCheck.IsGenericType ? toCheck.GetGenericTypeDefinition() : toCheck;
        if (generic == cur) {
            return true;
        }
        toCheck = toCheck.BaseType;
    }
    return false;
}</code>
登录后复制

此方法通过遍历继承链并比较基类型来确定toCheck是否直接或间接继承自generic。它通过检查IsGenericType属性的存在并检索泛型类型的定义来处理非泛型类型和泛型类型。

通过这种方法,您可以准确地确定类型是否派生自泛型基类,而不管指定的类型参数是什么。

使用示例:

<code class="language-csharp">bool result = IsSubclassOfRawGeneric(typeof(GenericClass<>), typeof(Test)); // result will be true</code>
登录后复制

以上是如何确定类型是否从C#中的通用基类继承?的详细内容。更多信息请关注PHP中文网其他相关文章!

来源:php.cn
本站声明
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系admin@php.cn
作者最新文章
热门教程
更多>
最新下载
更多>
网站特效
网站源码
网站素材
前端模板