我怎么知道什么时候一个接口的类型忽略继承者直接执行?(How do I know when an i

2019-08-31 16:56发布

这个问题似乎是,当我有一个类实现一个接口,并延长它实现接口的类:

class Some : SomeBase, ISome {}
class SomeBase : ISomeBase {}
interface ISome{}
interface ISomeBase{}

由于typeof运算(一些).GetInterfaces()返回和阵列ISome和ISomeBase,我不能如果ISome被实现或继承的(如ISomeBase)来区分。 正如MSDN我不能假设接口的顺序排列的,因此,我迷路了。 该方法的typeof(一些).GetInterfaceMap()不区分他们要么。

Answer 1:

你只需要排除的基本类型实现的接口:

public static class TypeExtensions
{
    public static IEnumerable<Type> GetInterfaces(this Type type, bool includeInherited)
    {
        if (includeInherited || type.BaseType == null)
            return type.GetInterfaces();
        else
            return type.GetInterfaces().Except(type.BaseType.GetInterfaces());
    }
}

...


foreach(Type ifc in typeof(Some).GetInterfaces(false))
{
    Console.WriteLine(ifc);
}


文章来源: How do I know when an interface is directly implemented in a type ignoring inherited ones?