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

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/

10-12 07:26