有时我们需要判断某个类是否实现了某个接口(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)); // 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

【.Net】在C#中判断某个类是否实现了某个接口的更多相关文章

  1. 在C#中判断某个类是否实现了某个接口

    有时我们需要判断某个类是否实现了某个接口(Interface),比如在使用反射机制(Reflection)来查找特定类型的时候. 简单来说,可以使用Type.IsAssignableFrom方法: t ...

  2. Delphi判断某个类是否实现了某个接口

    通过TObject.GetInterface可以获得对象的实例实现某个接口,前提条件是必须实例化对象后才能运行GetInterface 下面的方法可获取类是否实现了某个接口,并返回接口的偏移: fun ...

  3. 2016.12.5 在Eclipse中为实现类impl自动生成对应接口

    参考来自:http://jingyan.baidu.com/article/ab69b270d63f572ca6189f51.html 在Spring应用中,常常会用到“接口+实现类”的形式,即要实现 ...

  4. Kotlin——中级篇(五):枚举类(Enum)、接口类(Interface)详解

    在上一章节中,详细的类(class)做了一个实例讲解,提到了类(class)的实例化.构造函数.声明.实现方式.和Java中类的区别等.但是对于Kotlin中的类的使用还远远不止那些.并且在上文中提到 ...

  5. 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 ...

  6. 实体类相同属性间赋值与如何判断实体类中是否所有的字段都为null

    1,实体类相同属性间赋值 /// <summary> /// 将实体2的值动态赋值给实体1(名称一样的属性进行赋值) /// </summary> /// <param ...

  7. c#中判断类是否继承于泛型基类

    在c#中,有时候我们会编写类似这样的代码: public class a<T> { //具体类的实现 } public class b : a<string>{} 如果b继承a ...

  8. java中判断是否是一个无用的类

    类需要同时满足以下三个条件才能算是无用的类: 1.该类所有的实例都已经被回收,也就是java堆中不存在类的任何实例 2.加载该类的ClassLoader已经被回收 3.该类对应的java.lang.C ...

  9. fstream 中判断是否成功打开文件

    from: http://blog.csdn.NET/zhtsuc/article/details/2938614 关于C++ fstream的一个容易使用出错的地方 关于c++ 中 文件流的两个类, ...

随机推荐

  1. 天津Uber优步司机奖励政策(12月14日到12月20日)

    滴快车单单2.5倍,注册地址:http://www.udache.com/ 如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://www.cnblogs.com/mfry ...

  2. 宁波Uber优步司机奖励政策(8月10号-16号)

    本周奖励: 8月10日-8月16日: 滴滴快车单单2.5倍,注册地址:http://www.udache.com/如何注册Uber司机(全国版最新最详细注册流程)/月入2万/不用抢单:http://w ...

  3. 在Win10中通过命令行打开UWP应用

    近期由于需要在WinX菜单中添加几个UWP应用,但发现很难找到相应的命令行,Universal Apps 的快捷方式属性里也没有. 于是到网上搜了很久才找到一个E文的页面,试了一下确实可行,分享给大家 ...

  4. jdbc 连接各种数据库

    package com.fh.controller.ruitai.util; import java.sql.Connection; import java.sql.DriverManager; im ...

  5. OSG-HUD

    本文转至http://www.cnblogs.com/shapherd/archive/2010/08/10/osg.html 作者写的比较好,再次收藏,希望更多的人可以看到这个文章 互联网是是一个相 ...

  6. centos7下搭建django

    安装环境:centos7.4 1 安装nginx yum install nginx 注:尝试过在本地和腾讯云上安装,使用同一条命令:在本地安装提示没有可用安装包,云上安装正常 启动nginx,并启用 ...

  7. Python函数变量和返回值

    Python函数的全局变量和局部变量 1.不同的编程语言,程序可以分为函数和过程两大类,函数具有具体返回值,而过程则不具有具体的返回值,python只具有函数,因为对于它的一般函数,其返回值为所具体返 ...

  8. js 加密 crypto-js des加密

    js 加密 crypto-js    https://www.npmjs.com/package/crypto-js   DES  举例:   js 引入:   <script src=&quo ...

  9. TW实习日记:第14天

    今天可以说是又忙又不忙了,忙是因为要赶bug,似乎总有种隐形的力量催着你交工,但实际上太多涉及后端接口的问题,所以又要等别人修改接口才能改bug,可以说真是十分蛋疼了. 改bug的最大心得就是:写好注 ...

  10. 树和二叉树 -数据结构(C语言实现)

    读数据结构与算法分析 树的概念 一棵树是一些节点的集合,可以为空 由称做根(root)的节点以及0个或多个非空子树组成,子树都被一条来自根的有向边相连 树的实现 思路 孩子兄弟表示法:树中的每个节点中 ...