Ответ 1
Type[] types = typeof(IFoo).GetInterfaces();
Изменить: Если вы специально хотите IBar, вы можете сделать:
Type type = typeof(IFoo).GetInterface("IBar");
public interface IBar {}
public interface IFoo : IBar {}
typeof(IFoo).BaseType == null
Как я могу получить IBar?
Type[] types = typeof(IFoo).GetInterfaces();
Изменить: Если вы специально хотите IBar, вы можете сделать:
Type type = typeof(IFoo).GetInterface("IBar");
Интерфейс не является базовым. Интерфейсы не являются частью дерева наследования.
Чтобы получить доступ к списку интерфейсов, вы можете использовать:
typeof(IFoo).GetInterfaces()
или если вы знаете имя интерфейса:
typeof(IFoo).GetInterface("IBar")
Если вас интересует только то, что тип неявно совместим с другим типом (я подозреваю, это то, что вы ищете), используйте type.IsAssignableFrom(fromType). Это эквивалентно ключевому слову 'is', но с типами времени выполнения.
Пример:
if(foo is IBar) {
// ...
}
Является эквивалентным:
if(typeof(IBar).IsAssignableFrom(foo.GetType())) {
// ...
}
Но в вашем случае вас, вероятно, больше интересует:
if(typeof(IBar).IsAssignableFrom(typeof(IFoo))) {
// ...
}
В дополнение к тому, что написал другие плакаты, вы можете получить первый интерфейс из списка GetInterface() (если список не пуст), чтобы получить прямой родительский элемент IFoo. Это будет точный эквивалент вашей попытки .BaseType.