2010-10-08 93 views
6

Type.IsSubclassOf方法仅适用于两种具体类型,例如,如何检查一个接口是否在C#中扩展另一个接口?

public class A {} 
public class B : A {} 
typeof(B).IsSubclassOf(typeof(A)) // returns true 

有没有办法找出接口是否扩展了另一个?例如

public interface IA {} 
public interface IB : IA {} 

我能想到的唯一的事情就是在IB使用GetInterfaces,并检查它是否包含IA,没有人知道的另一个/更好的方式来做到这一点?

回答

12

你可以做

bool isAssignable = typeof(IA).IsAssignableFrom(typeof(IB)); 

它给你,你在这种情况下,我想需要的信息,也当然不是仅适用于接口。

我假设你有Type对象,如果你有实际的情况下,这是更短,更清晰,更高性能:

public interface ICar : IVehicle { /**/ } 

ICar myCar = GetSomeCar(); 
bool isVehicle = myCar is IVehicle; 
1

IsAssignableFrom是你在找什么。它等于is运算符,但运行时值类型。

实例:

// Does IDerivedInterface implements IBaseInterface ? 
bool yes = typeof(IBaseInterface).IsAssignableFrom(typeof(IDerivedInterface)); 

// Does instance implements IBaseInterface ? 
bool yes = typeof(IBaseInterface).IsAssignableFrom(instance.GetType()); 
相关问题