代码之家  ›  专栏  ›  技术社区  ›  theburningmonk

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

  •  6
  • theburningmonk  · 技术社区  · 15 年前

    这个 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 回复  |  直到 15 年前
        1
  •  12
  •   herzmeister    15 年前

    你可以的

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

    在这种情况下,我想它提供了所需的信息,当然,它不仅适用于接口。

    我想你已经 Type 对象,如果您有实际的实例,则它更短、更清晰、更高效:

    public interface ICar : IVehicle { /**/ }
    
    ICar myCar = GetSomeCar();
    bool isVehicle = myCar is IVehicle;
    
        2
  •  1
  •   Coincoin    15 年前

    IsAssignableFrom 是你要找的。相当于 is 运算符,但运行时值为类型。

    示例:

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