Type.GetInterfaces () возвращает только вам объявленные интерфейсы (MSDN должна иметь документацию, объясняющую это). Чтобы получить унаследованные интерфейсы, вы должны сделать работу самостоятельно. Что-то похож на:
using System;
using System.Linq;
public static IEnumerable<Type> GetAllInterfacesForType(this Type type)
{
foreach (var interfaceType in type.GetInterfaces())
{
yield return interfaceType;
foreach (var t in interfaceType.GetAllInterfacesForType())
yield return t;
}
}
public static IEnumerable<Type> GetUniqueInterfacesForType(this Type type)
{ return type.GetAllInterfaces().Distinct(); }
Я записал это с манжеты, так что извините, если он не скомпилирует прямо-таки-да-да-да.