Nie, nie ma czegoś takiego jak "bezpośredni" interfejs w skompilowanym kodzie. Twoja klasa jest skutecznie kompilowana jako:
class Bar : IBar, IFoo { }
i nie można rozróżnić tych dwóch. Jedyne, co możesz zrobić, to sprawdzić je wszystkie i sprawdzić, czy dwa lub więcej interfejsów dziedziczy po sobie nawzajem (i nawet w takim przypadku nie można naprawdę sprawdzić, czy autor klasy wyraźnie wspomniał o interfejs bazy w kodzie lub nie):
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;
}
Dlaczego chciałbyś to zrobić? Brzmi dla mnie jak błąd projektowy w twoim kodzie;) –
Zwrócona tablica nie jest deterministyczna. – sduplooy
@Oliver, system mapuje interfejsy do konkretnych typów. Problem polega na tym, że inny typ może implementować IFoo, ale nie chcemy kojarzyć interfejsu IFoo z klasą Bar, ale raczej z interfejsem IBar. – sduplooy