C#中实现判断某个类是否实现了某个接口
作者:junjie 发布时间:2022-12-31 19:39:45
有时我们需要判断某个类是否实现了某个接口(Interface),比如在使用反射机制(Reflection)来查找特定类型的时候。
简单来说,可以使用Type.IsAssignableFrom方法:
typeof(IFoo).IsAssignableFrom(bar.GetType());
typeof(IFoo).IsAssignableFrom(typeof(BarClass));
从字面意思可以看出,IsAssignableFrom表示BarClass类型能否赋值给IFoo接口,所以它返回true的条件就是BarClass直接或间接实现了IFoo接口。Type类型中还有一个方法是IsSubclassOf,它只能用于判断类的继承关系,比如
typeof(FooClass).IsSubclassOf(typeof(BarClass)) == true
表示FooClass是继承自BarClass。
当然IsAssignableFrom也可以用来判断继承关系。
于是,对于以下的代码:
interface I { /* ... */ }
class A : I { /* ... */ }
class B : A { /* ... */ }
IsSubclassOf和IsAssignableFrom的返回值为:
typeof(A).isAssignableFrom(typeof(I)); // falsetypeof(A).isSubClassOf(typeof(I)); // false typeof(I).isAssignableFrom(typeof(A)); // truetypeof(I).isAssignableFrom(typeof(B)); // truetypeof(B).isSubClassOf(typeof(I)); // false typeof(A).isAssignableFrom(typeof(A)); // truetypeof(A).isSubClassof(typeof(A)); // false typeof(A).isAssignableFrom(typeof(B)); // truetypeof(A).isSubClassof(typeof(B)); // false typeof(B).isAssignableFrom(typeof(A)); // falsetypeof(B).isSubClassof(typeof(A)); // true


猜你喜欢
- 一、前言一个完整的Java应用程序,当程序在运行时,即会调用该程序的一个入口函数来调用系统的相关功能,而这些功能都被封装在不同的class文
- 一、创建web项目1、打开idea软件,点击界面上的Create New Project2、进入如下界面。选中 java Enterpris
- 问题场景今天小编在MyBatis 整合Spring 的时候,使用到了@MapperScan,在启动期出现了一个错误:Invalid defa
- Java中java.io包为我们提供了输入流和输出流,对文件的读写基本上都依赖于这些封装好的关于流的类中来实现。前段时间遇到了以下两种需求:
- 第一种方法:获取手机的IMSI码,并判断是中国移动\中国联通\中国电信TelephonyManager telManager = (Tele
- C# 复制与删除文件的实现方法1、首先是复制文件首先打开我们的对话框获得文件路径,当然也可以直接编写路径private void BtnAd
- 01 高效设置我们先来讲讲有哪些设置调整之后 IDEA 会更好用。先说明一点:这里只是根据我个人喜好和习惯的建议,IDEA 的默认配置已经很
- 一般来说,常用的设计模式有以下八种:单例、工厂、观察者、代理、命令、适配器、合成、访问者单例模式:目的是为了让系统中只有一个调用对象,缺点是
- 声明一个客户端对象:protected RedisClient Redis = new RedisClient("127.0.0
- 本文实例讲述了Android判断Activity是否在最上层的方法。分享给大家供大家参考,具体如下:private boolean isTo
- 有这样一道面试题:如何将SQLite数据库(dictionary.db文件)与apk文件一起发布? 答: 把这个文件
- 文件流输出文件名中文不显示response返回文件流 用response.setHeader(“Content-disp
- 本文实例为大家分享了SpringBoot使用POI进行Excel下载的具体代码,供大家参考,具体内容如下使用poi处理Excel特别方便,此
- 一、ThreadPool概述提供一个线程池,该线程池可用于执行任务、发送工作项、处理异步 I/O、代表其他线程等待以及处理计时器。创建线程需
- 表单代码<!DOCTYPE html><html lang="en" xmlns="http
- 本文实例讲述了Android基于ViewPager实现的应用欢迎界面。分享给大家供大家参考,具体如下:有时候开发一个应用需要指导用户提示一些
- 先画个图,了解下Android下数据库操作的简单流程:1.首先,写一个自己的数据库操作帮助类,这个类继承自Android自带的SQLiteO
- 需求分析需求一:图片列表查询,从后台返回数据,将数据展示在页面上需求二:新增图片,将新增图书的数据传递到后台,并在控制台打印说明:此次案例的
- 本文实例讲述了java在网页上面抓取邮件地址的方法。分享给大家供大家参考。具体实现方法如下:import java.io.BufferedR
- 首先来看看Map集合获取元素的三种常见方法keySet()、values()、entrySet()1. values():返回map集合的所