Die*_*lez 7 c# reflection interface
出现的问题是当我有一个实现接口的类,并扩展实现接口的类时:
class Some : SomeBase, ISome {}
class SomeBase : ISomeBase {}
interface ISome{}
interface ISomeBase{}
Run Code Online (Sandbox Code Playgroud)
由于typeof(Some).GetInterfaces()返回带有ISome和ISomeBase的数组,我无法区分ISome是实现还是继承(如ISomeBase).作为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);
}
Run Code Online (Sandbox Code Playgroud)