如何在C#中检查接口是否扩展了另一个接口?

时间:2010-10-08 17:15:58

标签: c# .net inheritance

Type.IsSubclassOf方法仅适用于两种具体类型,例如

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

有没有办法找出接口是否扩展了另一个接口? e.g。

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

我唯一能想到的就是在IB上使用GetInterfaces并检查它是否包含IA,有没有人知道另一种/更好的方法呢?

2 个答案:

答案 0 :(得分:12)

你可以做到

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

在这种情况下,我会提供您所需的信息,但当然也适用于接口。

我假设你有Type个对象,如果你有实际的实例,这个更短,更清晰,更高效:

public interface ICar : IVehicle { /**/ }

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

答案 1 :(得分: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());