No, no existe la interfaz "inmediata" en el código compilado. Su clase se compila efectivamente como:
class Bar : IBar, IFoo { }
y no puede distinguir entre los dos. Lo único que podría hacer es verificarlos a todos y ver si dos o más de las interfaces se heredan o no (e incluso en ese caso, no se puede verificar si el autor de la clase ha mencionado explícitamente el interfaz base o codificada):
static IEnumerable<Type> GetImmediateInterfaces(Type type)
{
var interfaces = type.GetInterfaces();
var result = new HashSet<Type>(interfaces);
foreach (Type i in interfaces)
result.ExceptWith(i.GetInterfaces());
return result;
}
¿Por qué le gustaría hacer eso? Me parece una falla de diseño en tu código;) –
La matriz devuelta no es determinista. – sduplooy
@Oliver, el sistema asigna interfaces a tipos concretos. El problema es que otro tipo podría estar implementando IFoo pero no queremos asociar la interfaz IFoo con la clase Bar, sino con la interfaz IBar. – sduplooy