Nein, es gibt keine "unmittelbare" Schnittstelle im kompilierten Code. Ihre Klasse ist effektiv kompiliert als:
class Bar : IBar, IFoo { }
und Sie können nicht zwischen den beiden unterscheiden. Das einzige, was Sie tun könnten, ist, alle zu überprüfen und zu sehen, ob zwei oder mehr der Interfaces von einander erben oder nicht (und selbst in diesem Fall können Sie nicht wirklich überprüfen, ob der Autor der Klasse die. Explizit erwähnt hat) Basisschnittstelle in Code oder nicht):
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;
}
Warum möchten Sie das tun? Es klingt für mich wie ein Designfehler in Ihrem Code;) –
Das zurückgegebene Array ist nicht deterministisch. – sduplooy
@Oliver, das System bildet Schnittstellen zu konkreten Typen ab. Das Problem ist, dass ein anderer Typ IFoo implementiert, aber wir möchten die IFoo-Schnittstelle nicht mit der Bar-Klasse, sondern mit der IBar-Schnittstelle verknüpfen. – sduplooy