在c#中,有时我们会这样写代码:
public class a
{ //具体类的实现
}
public class b : a{}
如果b继承a的类型不确定,此时我们无法直接判断b是否继承自a。
如果我们编写如下代码:
typeof(b).baseType == typeof(a)
返回值为假。
因为(b)。返回 a`1[.],并且 (a) 返回 a`1[T]。显然这两种类型并不相等。所以上面返回flase是正常的。
那么如何解决这个问题呢?
最简单的方法肯定是(b)。== (a) 返回真。
但是由于我们使用了T,很大概率我们不知道传入的类型,所以这个方法是行不通的。
另一种方法稍微麻烦一些。
首先,我们将泛型类型转换为泛型原型,然后我们可以比较泛型原型。
C#提供了一种获取泛型原型的方法(tion(),MSDN对此进行了解释如下:
返回表示可用于构造当前泛型类型的泛型类型定义的 Type 对象。
所以我们可以直接使用 (b)..tion() 来得到 a。
这里需要注意的是,当b不是泛型时,tion()会抛出异常,所以在使用之前要判断b是否是泛型类。
这个方法在c#中也有提供,MSDN解释如下:
获取一个值,该值指示当前类型是否为泛型类型。
所以我们判断一个类是否继承自泛型基类的方式是这样的:
if (typeof(b).baseType.IsGenericType && typeof(b).baseType.GetGenericTypeDefinition() == typeof(a)){
// 这里是b继承于a的逻辑
}
© 版权声明
本站下载的源码均来自公开网络收集转发二次开发而来,
若侵犯了您的合法权益,请来信通知我们1413333033@qq.com,
我们会及时删除,给您带来的不便,我们深表歉意。
下载用户仅供学习交流,若使用商业用途,请购买正版授权,否则产生的一切后果将由下载用户自行承担,访问及下载者下载默认同意本站声明的免责申明,请合理使用切勿商用。
THE END
暂无评论内容