码农知识堂 - 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>的逻辑
    }
  • 相关阅读:
    【Json】——jsoncpp的序列化以及反序列化
    分享一个2022年火遍全网的Python框架
    Spring实例化源码解析之循环依赖CircularReference(十三)
    多任务联合训练,出现Nan的问题
    【数据结构】队列的知识点
    VR虚拟展厅的亮点是什么?有哪些应用?
    高云FPGA系列教程(7):ARM GPIO外部中断
    Vue插槽slot
    SpringCloud Alibaba微服务实战二 - 服务注册
    vue基础相关问题:vue指令和动态及计算机属性
  • 原文地址:https://www.cnblogs.com/j4587698/p/16142274.html
  • 最新文章
  • 攻防演习之三天拿下官网站群
    数据安全治理学习——前期安全规划和安全管理体系建设
    企业安全 | 企业内一次钓鱼演练准备过程
    内网渗透测试 | Kerberos协议及其部分攻击手法
    0day的产生 | 不懂代码的"代码审计"
    安装scrcpy-client模块av模块异常,环境问题解决方案
    leetcode hot100【LeetCode 279. 完全平方数】java实现
    OpenWrt下安装Mosquitto
    AnatoMask论文汇总
    【AI日记】24.11.01 LangChain、openai api和github copilot
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1
正则表达式工具 cron表达式工具 密码生成工具

京公网安备 11010502049817号