这个问题似乎是,当我有一个类实现一个接口,并延长它实现接口的类:
class Some : SomeBase, ISome {}
class SomeBase : ISomeBase {}
interface ISome{}
interface ISomeBase{}
由于typeof运算(一些).GetInterfaces()返回和阵列ISome和ISomeBase,我不能如果ISome被实现或继承的(如ISomeBase)来区分。 正如MSDN我不能假设接口的顺序排列的,因此,我迷路了。 该方法的typeof(一些).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);
}
文章来源: How do I know when an interface is directly implemented in a type ignoring inherited ones?