开发者

How to check if an interface extends another in C#?

The Type.IsSubclassOf method on开发者_运维技巧ly works with two concrete types, e.g.

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

Is there a way to find out if an interface extends another? e.g.

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

The only thing I can think of is to use GetInterfaces on IB and check if it contains IA, does anyone know of another/better way to do this?


You can do

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

which gives you the information you need in this case I guess, but also of course works not only for interfaces.

I assume you have Type objects, if you have actual instances, this is shorter, clearer and more performant:

public interface ICar : IVehicle { /**/ }

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


IsAssignableFrom is what you are looking for. It's the equivalent of the is operator but with runtime values as types.

Examples:

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

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

上一篇:

下一篇:

精彩评论

暂无评论...
验证码 换一张
取 消

最新问答

问答排行榜