Non, il n'y a pas d'interface "immédiate" dans le code compilé. Votre classe est efficacement compilée en tant que:
class Bar : IBar, IFoo { }
et vous ne pouvez pas distinguer entre les deux. La seule chose que vous pouvez faire est de les vérifier tous et de voir si deux interfaces ou plus héritent l'une de l'autre ou non (et même dans ce cas, vous ne pouvez pas vraiment vérifier si l'auteur de la classe a explicitement mentionné le interface de base en code ou non):
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;
}
Pourquoi voudriez-vous faire cela? Cela ressemble à un défaut de conception dans votre code;) –
Le tableau retourné est non déterministe. – sduplooy
@Oliver, le système mappe les interfaces aux types de béton. Le problème est qu'un autre type pourrait implémenter IFoo mais nous ne voulons pas associer l'interface IFoo à la classe Bar, mais plutôt à l'interface IBar. – sduplooy