码农知识堂 - 1000bd
  •   Python
  •   PHP
  •   JS/TS
  •   JAVA
  •   C/C++
  •   C#
  •   GO
  •   Kotlin
  •   Swift
  • c#中判断类是否继承于泛型基类


    在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>的逻辑
    }
  • 相关阅读:
    VMware虚拟机开机黑屏问题
    Linux基础指令
    互联网应用主流框架整合之Spring Boot运维体系
    动态规划--完全背包问题1
    Android app保活(前台服务)
    四川思维跳动商务信息咨询有限公司是真的吗?
    代码随想录算法训练营第五十九天| 503.下一个更大元素II,42. 接雨水
    京华烟尘歌
    在Linux/Ubuntu/Debian中使用 `tee` 命令将输出显示在终端并写入文件中
    UnitTest框架的使用
  • 原文地址:https://www.cnblogs.com/j4587698/p/16142274.html
  • 最新文章
  • 【JVM】编译执行与解释执行的区别是什么?JVM 使用哪种方式?
    用 Hashids 优雅解决 C 端自增 ID 暴露问题
    V8引擎 精品漫游指南--Ignition篇(上) 指令 栈帧 槽位 调用约定 内存布局 基础内容
    LLVM Pass快速入门(四):代码插桩
    milkup:桌面端 markdown AI续写和即时渲染
    基于项目工程构建SBOM(软件物料清单)的研究
    鸿蒙应用开发UI基础第二节:鸿蒙应用程序框架核心解析与实操
    .NET 中如何快速实现 List 集合去重?
    扣子Coze实战:从0到1打造抖音+小红书热点监控智能体
    浅谈数据访问层
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号