c#中判断类是否继承于泛型基类

在c#中,有时我们会这样写代码:

public class a 
{ //具体类的实现
}
public class b : a{}

图片[1]-c#中判断类是否继承于泛型基类-唐朝资源网

如果b继承a的类型不确定,此时我们无法直接判断b是否继承自a。

如果我们编写如下代码:

typeof(b).baseType == typeof(a)

返回值为假。

因为(b)。返回 a`1[.],并且 (a) 返回 a`1[T]。显然这两种类型并不相等。所以上面返回flase是正常的。

那么如何解决这个问题呢?

最简单的方法肯定是(b)。== (a) 返回真。

但是由于我们使用了T,很大概率我们不知道传入的类型,所以这个方法是行不通的。

图片[2]-c#中判断类是否继承于泛型基类-唐朝资源网

另一种方法稍微麻烦一些。

首先,我们将泛型类型转换为泛型原型,然后我们可以比较泛型原型。

C#提供了一种获取泛型原型的方法(tion(),MSDN对此进行了解释如下:

返回表示可用于构造当前泛型类型的泛型类型定义的 Type 对象。

图片[3]-c#中判断类是否继承于泛型基类-唐朝资源网

所以我们可以直接使用 (b)..tion() 来得到 a。

这里需要注意的是,当b不是泛型时,tion()会抛出异常,所以在使用之前要判断b是否是泛型类。

这个方法在c#中也有提供,MSDN解释如下:

获取一个值,该值指示当前类型是否为泛型类型。

所以我们判断一个类是否继承自泛型基类的方式是这样的:

if (typeof(b).baseType.IsGenericType && typeof(b).baseType.GetGenericTypeDefinition() == typeof(a)){ 
// 这里是b继承于a的逻辑
}

© 版权声明
THE END
喜欢就支持一下吧
点赞8 分享
评论 抢沙发
头像
欢迎您留下宝贵的见解!
提交
头像

昵称

取消
昵称表情代码图片