c# - 如何判断对象是否继承自抽象泛型类

标签 c# generics inheritance types

我有一个派生自的通用抽象类:

abstract class SuperClass<T>
where T : SuperDataClass

abstract class SuperDataClass

数据类型仅限于SuperDataClass,所以每一个具体的数据类型都必须继承自SuperDataClass。 最后我有一对 SuperClass 和 SuperDataClass 继承者,例如:

class DataClassA : SuperDataClass
class ClassA : SuperClass<DataClassA>

class DataClassB : SuperDataClass
class ClassB : SuperClass<DataClassB>

我如何检查一个对象,例如ClassA 在不知道可能的数据类型的情况下继承自 SuperClass?

我尝试了以下方法,但不起作用:

if (testObject.GetType().IsAssignableFrom(typeof(SuperClass<SuperDataClass>))) {
    Console.WriteLine("The test object inherits from SuperClass");
}

那么 if 语句应该是什么样子呢?

最佳答案

递归

Type type2 = type; // type is your type, like typeof(ClassA)

while (type2 != null)
{
    if (type2.IsGenericType && 
        type2.GetGenericTypeDefinition() == typeof(SuperClass<>))
    {
        // found
    }

    type2 = type2.BaseType;
}

请注意,如果您正在寻找一个接口(interface),这将不起作用!

关于c# - 如何判断对象是否继承自抽象泛型类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18098717/

相关文章:

c# - RavenDB Map Reduce 非重复索引

c# - 正则表达式题: Until next match OR End Of Document

c# - 限制类型参数

c++ - 具有派生类实例的工厂

java - 为什么 Java 不允许我执行这种类型的多态性/继承?

javascript - 获取对象内部某些内容的父值

c# - 在 webbrowser 控件中模拟鼠标单击

c# - 从表达式创建 DbSet<T> 以创建动态查询服务

没有指定类型的 C# nameof 泛型类型

generics - 定义一个符合多个协议(protocol)/协议(protocol)+父类(super class)的变量