码农知识堂 - 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>的逻辑
    }
  • 相关阅读:
    安卓讲课笔记5.4 单选按钮和复选框
    公开IP属地信息如何保护用户的隐私?
    牵手乌金石,共创财富梦—全国市场盛大启动
    Amazon Lightsail——兼具亚马逊云科技的强大功能与 VPS 的简易性
    深入理解java泛型
    Swin V2:向更大容量、更高分辨率的更大模型迈进
    CocosCreator3.8研究笔记(十五)CocosCreator 资源管理Asset Bundle
    苏宁API接口
    5G(3)5G NR的物理资源
    LLM大语言模型(典型ChatGPT)入门指南
  • 原文地址:https://www.cnblogs.com/j4587698/p/16142274.html
  • 最新文章
  • DBLens + 企业微信智能机器人:把数据库 Agent 接入工作群
    通过 CC Switch 本地路由让 Codex CLI 接入 DeepSeek 等第三方模型
    简单vmpwn的思路
    Slickflow.AI 基于 Harness 工程规范的多智能体交互过程实现
    Dynamic Workflows 深度解析:Claude Code 为什么把多 Agent 编排写进可执行代码
    Codex新手保姆级教程:新手从安装到跑通第一个项目!
    花了一晚上AI Coding, 在不熟悉的领域,使用AI帮同事解决了跳槽的小问题
    一首《谦比希铜矿之歌》厂歌火爆全网,背后是AI的数学本质
    园友特惠| 1Panel 企业版 & AI 一体机限量放售,最高直降 5100!
    C# 内存安全性的重大演进:重新定义 unsafe 关键字
  • 热门文章
  • 十款代码表白小特效 一个比一个浪漫 赶紧收藏起来吧!!!
    奉劝各位学弟学妹们,该打造你的技术影响力了!
    五年了,我在 CSDN 的两个一百万。
    Java俄罗斯方块,老程序员花了一个周末,连接中学年代!
    面试官都震惊,你这网络基础可以啊!
    你真的会用百度吗?我不信 — 那些不为人知的搜索引擎语法
    心情不好的时候,用 Python 画棵樱花树送给自己吧
    通宵一晚做出来的一款类似CS的第一人称射击游戏Demo!原来做游戏也不是很难,连憨憨学妹都学会了!
    13 万字 C 语言从入门到精通保姆级教程2021 年版
    10行代码集2000张美女图,Python爬虫120例,再上征途
小工具 小游戏
Copyright © 2022 侵权请联系2656653265@qq.com    京ICP备2022015340号-1

京公网安备 11010502049817号