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,有没有人知道另一种/更好的方法呢?
答案 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());