欢迎来到代码驿站!

.NET代码

当前位置:首页 > 软件编程 > .NET代码

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

时间:2023-03-10 10:46:18|栏目:.NET代码|点击:

在c#中,有时候我们会编写类似这样的代码:

public class a<T> 
{ //具体类的实现
}
public class b : a<string>{}

如果b继承a的类型不确定,这个时候我们是无法通过baseType来直接判断b是否继承于a的。

如果我们写如下代码:

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

返回值是false

因为typeof(b).baseType返回的类型是a`1[System.String],而typeof(a<>)返回的是a`1[T]。很明显这两个类型是不相等的。所以上面返回flase也就是正常现象了。

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

最简单的办法肯定是typeof(b).baseType == typeof(a<string>)这样就可以返回true。

但是由于我们用了T,所以大概率我们是不知道进来的类型的,所以这种方法不行。

另一种方法麻烦一点。

首先,我们把泛型类型转换成泛型原型,然后再去比较泛型原型就可以了。

c#中提供了获取泛型原型的方法GetGenericTypeDefinition(),MSDN解释如下:

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

所以我们直接使用typeof(b).baseType.GetGenericTypeDefinition()既可获取a<>

这里需要注意的是GetGenericTypeDefinition()在b不是泛型时会抛出异常,所以我们在使用前应该判断b是否是一个泛型类。

c#中同样提供了这个方法IsGenericType,MSDN解释如下:

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

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

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

上一篇:C#构造函数在基类和父类中的执行顺序

栏    目:.NET代码

下一篇:没有了

本文标题:c#中判断类是否继承于泛型基类

本文地址:http://www.codeinn.net/misctech/227221.html

推荐教程

广告投放 | 联系我们 | 版权申明

重要申明:本站所有的文章、图片、评论等,均由网友发表或上传并维护或收集自网络,属个人行为,与本站立场无关。

如果侵犯了您的权利,请与我们联系,我们将在24小时内进行处理、任何非本站因素导致的法律后果,本站均不负任何责任。

联系QQ:914707363 | 邮箱:codeinn#126.com(#换成@)

Copyright © 2020 代码驿站 版权所有