如何在C#中检查接口是否继承另一个接口?

6

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

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

有没有一种方法可以找出一个接口是否继承了另一个接口?例如:
public interface IA {}
public interface IB : IA {}

我能想到的唯一方法是在IB上使用GetInterfaces并检查它是否包含IA,有没有其他更好的方法可以做到这一点?
2个回答

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());

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接