在C#中判断某个类是否实现了某个接口
2014-06-28 09:46
288 查看
有时我们需要判断某个类是否实现了某个接口(Interface),比如在使用反射机制(Reflection)来查找特定类型的时候。
简单来说,可以使用Type.IsAssignableFrom方法:
从字面意思可以看出,IsAssignableFrom表示BarClass类型能否赋值给IFoo接口,所以它返回true的条件就是BarClass直接或间接实现了IFoo接口。Type类型中还有一个方法是IsSubclassOf,它只能用于判断类的继承关系,比如[csharp light="true"]typeof(FooClass).IsSubclassOf(typeof(BarClass)) == true[/csharp]表示FooClass是继承自BarClass。
当然IsAssignableFrom也可以用来判断继承关系。
于是,对于以下的代码:
IsSubclassOf和IsAssignableFrom的返回值为:
简单来说,可以使用Type.IsAssignableFrom方法:
typeof(IFoo).IsAssignableFrom(bar.GetType()); typeof(IFoo).IsAssignableFrom(typeof(BarClass));
从字面意思可以看出,IsAssignableFrom表示BarClass类型能否赋值给IFoo接口,所以它返回true的条件就是BarClass直接或间接实现了IFoo接口。Type类型中还有一个方法是IsSubclassOf,它只能用于判断类的继承关系,比如[csharp light="true"]typeof(FooClass).IsSubclassOf(typeof(BarClass)) == true[/csharp]表示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
相关文章推荐
- C#中如何判断实例是否继承了某个父类或者实现了某类接口
- 在C#中判断某个类是否实现了某个接口
- 在C#中判断某个类是否实现了某个接口
- C#判断一个类是否实现了某个接口3种实现方法
- c# 如何判断一个类是否实现了某个接口
- 【.Net】在C#中判断某个类是否实现了某个接口
- C# 如何判断一个类是否实现了某个接口
- 在C#中判断某个类是否实现了某个接口
- C#控制台基础 判断一个类是否实现了指定的接口 IsAssignableFrom
- 在C#中判断某个类是否实现了某个接口
- C#中实现判断某个类是否实现了某个接口
- C#判断某个类是否派生某个类或是否实现了某个接口
- c# 如何判断一个类是否实现了某个接口
- java中判断一个对象是否实现了某个接口
- C#实现判断字符是否为中文
- 判断一个字符串是否全是数字的多种方法及其性能比较(C#实现)
- C#实现判断一个IP是否是指定范围内的IP
- C#实现注册码 CPU序列号,生成机器码 生成注册码 判断是否注册
- C#实现判断字符是否为中文
- C# 中用Socket实现判断网络是否断开的实例