在C#中判断某个类是否实现了某个接口
有时我们需要判断某个类是否实现了某个接口(Interface),比如在使用反射机制(Reflection)来查找特定类型的时候。
简单来说,可以使用Type.IsAssignableFrom方法:
1
2
|
typeof(IFoo).IsAssignableFrom(bar.GetType());
typeof(IFoo).IsAssignableFrom(typeof(BarClass));
|
从字面意思可以看出,IsAssignableFrom表示BarClass类型能否赋值给IFoo接口,所以它返回true的条件就是BarClass直接或间接实现了IFoo接口。Type类型中还有一个方法是IsSubclassOf,它只能用于判断类的继承关系,比如
1
|
typeof(FooClass).IsSubclassOf(typeof(BarClass)) == true
|
表示FooClass是继承自BarClass。
当然IsAssignableFrom也可以用来判断继承关系。
于是,对于以下的代码:
1
2
3
|
interface I { /* ... */ }
class A : I { /* ... */ }
class B : A { /* ... */ }
|
IsSubclassOf和IsAssignableFrom的返回值为:
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
|
typeof(A).isAssignableFrom(typeof(I)); // false
typeof(A).isSubClassOf(typeof(I)); // false
typeof(I).isAssignableFrom(typeof(A)); // true
typeof(I).isAssignableFrom(typeof(B)); // true
typeof(B).isSubClassOf(typeof(I)); // false
typeof(A).isAssignableFrom(typeof(A)); // true
typeof(A).isSubClassof(typeof(A)); // false
typeof(A).isAssignableFrom(typeof(B)); // true
typeof(A).isSubClassof(typeof(B)); // false
typeof(B).isAssignableFrom(typeof(A)); // false
typeof(B).isSubClassof(typeof(A)); // true
|
转载于:https://www.cnblogs.com/lip-blog/p/9131916.html
在C#中判断某个类是否实现了某个接口相关推荐
- 【Binder 机制】AIDL 分析 ( 创建 AIDL 文件 | 创建 Parcelable 类 | AIDL 中使用 Parcelable 类 | 编译工程生成 AIDL 对应的Java源文件 )
文章目录 一.创建 AIDL 文件 1.创建 AIDL 目录 2.创建 AIDL 文件 3.创建 Parcelable 类 4.AIDL 目录下声明 Parcelable 类 5.AIDL 中使用 P ...
- ASM 判定一个类,实现了指定接口
为什么80%的码农都做不了架构师?>>> ASM 判定一个类,实现了指定接口 技术支持 ASM 中,ClassReader 类:对已存在的进行解析,并提供获取类信息的方法. 通 ...
- Python编程语言学习:python的列表的特殊应用之一行命令实现if判断中的两类判断
Python编程语言学习:python的列表的特殊应用之一行命令实现if判断中的两类判断 目录 python的列表的特殊应用 一行命令实现if判断中的两类判断 python的列表的特殊应用 一行命令实 ...
- C#判断一个类中有无指定名称的方法
C#中可以通过反射分析元数据来解决这个问题,示例代码如下: 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 2 ...
- java throwable判断,判断(2分) Java语言中的所有异常类都是java.lang.Throwable的子类。...
判断(2分) Java语言中的所有异常类都是java.lang.Throwable的子类. 更多相关问题 This artical is probably ________. 某企业2010年12月3 ...
- python中的新式类与旧式类的一些基于descriptor的概念(上)
python中基于descriptor的一些概念(上) 1. 前言 2. 新式类与经典类 2.1 内置的object对象 2.2 类的方法 2.2.1 静态方法 2.2.2 类方法 2.3 新式类(n ...
- java判断一个对象是否为空_Java中判断对象是否为空的方法的详解
首先来看一下工具StringUtils的判断方法: 一种是org.apache.commons.lang3包下的: 另一种是org.springframework.util包下的.这两种StringU ...
- java 返回值判断_在Java中判断方法重载的条件除了参数外,还可以通过返回值类型判断。_学小易找答案...
[单选题]若int x;且有下面的程序片断,则输出结果是() . for (x=3; x<6; x++) { printf((x%2) ? "##%d" : "** ...
- Delphi中的线程类
Delphi中有一个线程类TThread是用来实现多线程编程的,这个绝大多数Delphi书藉都有说到,但基本上都是对TThread类的几个成员作一简单介绍,再说明一下Execute的实现和Synchr ...
最新文章
- 前端自动化构建工具webpack (二)之css和插件加载总结
- Python会消亡吗?
- vue+file-saver+xlsx导出table为excel
- c++ 判断nil_golang A=nil,B=A,but B!=nil 这是真的
- kubernetes集群搭建以及遇到的问题
- hdu 1317 XYZZY【Bellheman_ford 判断正环小应用】
- linux7做服务器,centos7 搭建yum服务器
- 消解原理推理_什么是推理统计中的Z检验及其工作原理?
- 全网都在看的Fiddler、mitmproxy抓包秘籍,花钱都买不到
- sqlserver 参数化查询 允许为null_关于SQL Server的insert执行的秘密(上)一个最简单的insert分析...
- 【译】前端框架技术选型 React vs. Vue (vs. Angular)
- Mysql 默认约束 now_MYSQL中怎样设列的默认值为Now()的介绍
- 大型网站架构系列:20本技术书籍推荐
- 太赞了!终于有人把怎么在IDEA中使用Java热部署插件JRebel讲清楚了...
- mix2线刷开发板救砖_小米小米Mix 2手机快速救砖,线刷教程分享,小白轻松救活手机...
- RMI(Remote Method Invocation)原理浅析
- opencv学习日记
- 如何测试网站服务器安全性,怎么检测网站安全性?
- LeCo-200. 岛屿数量
- html调用一言api,纯 JavaScript 实现网站一言功能