出现的问题是,当我有一个实现接口的类,并且扩展了一个实现接口的类时:

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

由于typeof(some).getinterfaces()返回带有等距和等距基的数组,我无法区分等距是作为等距基实现的还是继承的。作为msdn,我不能假定数组中接口的顺序,因此我丢失了。方法typeof(some).getInterfaceMap()也不区分它们。

最佳答案

只需排除由基类型实现的接口:

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);
}

08-27 15:24