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

如何在C#中检查一个接口是否扩展了另一个接口?,c#,.net,inheritance,C#,.net,Inheritance,该方法仅适用于两种混凝土类型,例如: 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,有人知道另一种/更好的方法吗?您可以这样做

该方法仅适用于两种混凝土类型,例如:

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,有人知道另一种/更好的方法吗?

您可以这样做

bool isAssignable = typeof(IA).IsAssignableFrom(typeof(IB));
在这种情况下,我想这会为您提供所需的信息,但当然,这不仅适用于接口

我假设您有
类型
对象,如果您有实际的实例,这会更短、更清晰、更高效:

public interface ICar : IVehicle { /**/ }

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

IsAssignableFrom
是您正在寻找的。它相当于
is
运算符,但使用运行时值作为类型

示例:

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

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