在C#中判断某个类是否实现了某个接口
2017-07-15 21:12
429 查看
有时我们需要判断某个类是否实现了某个接口(Interface),比如在使用反射机制(Reflection)来查找特定类型的时候。
简单来说,可以使用Type.IsAssignableFrom方法:
从字面意思可以看出,IsAssignableFrom表示BarClass类型能否赋值给IFoo接口,所以它返回true的条件就是BarClass直接或间接实现了IFoo接口。Type类型中还有一个方法是IsSubclassOf,它只能用于判断类的继承关系,比如
表示FooClass是继承自BarClass。
当然IsAssignableFrom也可以用来判断继承关系。
于是,对于以下的代码:
IsSubclassOf和IsAssignableFrom的返回值为:
http://www.cnblogs.com/radray/p/4529482.html
简单来说,可以使用Type.IsAssignableFrom方法:
1 2 | typeof(IFoo).IsAssignableFrom(bar.GetType()); typeof(IFoo).IsAssignableFrom(typeof(BarClass)); |
1 | typeof(FooClass).IsSubclassOf(typeof(BarClass)) == true |
当然IsAssignableFrom也可以用来判断继承关系。
于是,对于以下的代码:
1 2 3 | interface I { /* ... */ } class A : I { /* ... */ } class B : A { /* ... */ } |
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 |
相关文章推荐
- C#中实现判断某个类是否实现了某个接口
- C#中如何判断实例是否继承了某个父类或者实现了某类接口
- 在C#中判断某个类是否实现了某个接口
- C#判断一个类是否实现了某个接口3种实现方法
- C#判断某个类是否派生某个类或是否实现了某个接口
- 在C#中判断某个类是否实现了某个接口
- c# 如何判断一个类是否实现了某个接口
- C#控制台基础 判断一个类是否实现了指定的接口 IsAssignableFrom
- c# 如何判断一个类是否实现了某个接口
- 在C#中判断某个类是否实现了某个接口
- 【.Net】在C#中判断某个类是否实现了某个接口
- C# 如何判断一个类是否实现了某个接口
- 在C#中判断某个类是否实现了某个接口
- C#实现多级子目录Zip压缩解压实例 NET4.6下的UTC时间转换 [译]ASP.NET Core Web API 中使用Oracle数据库和Dapper看这篇就够了 asp.Net Core免费开源分布式异常日志收集框架Exceptionless安装配置以及简单使用图文教程 asp.net core异步进行新增操作并且需要判断某些字段是否重复的三种解决方案 .NET Core开发日志
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- c# 判断指定文件是否存在的简单实现
- 通过反射来判断某个程序集中是否有实现该接口的类
- 在进行C#编程时候,有的时候我们需要判断一个字符串是否是数字字符串,我们可以通过以下两种方法来实现。 【方法一】:使用 try{} catch{} 语句。 我们可以在try语句块中试图
- C#实现判断操作系统是否为Win8以上版本
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)--来源CSDN