加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

c# – 如何确定对象是否继承自抽象泛型类

发布时间:2020-12-15 05:41:02 所属栏目:百科 来源:网络整理
导读:我有一个通用的抽象类,我派生自: abstract class SuperClassTwhere T : SuperDataClassabstract class SuperDataClass 数据类型仅限于SuperDataClass,因此每个具体数据类型都必须从SuperDataClass继承. 最后我有一对SuperClass和SuperDataClass继承者,例如
我有一个通用的抽象类,我派生自:
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;
}

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

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读