Подтвердить что ты не робот

Как получить интерфейс basetype через отражение?

public interface IBar {} 
public interface IFoo : IBar {}

typeof(IFoo).BaseType == null

Как я могу получить IBar?

4b9b3361

Ответ 1

Type[] types = typeof(IFoo).GetInterfaces();

Изменить: Если вы специально хотите IBar, вы можете сделать:

Type type = typeof(IFoo).GetInterface("IBar");

Ответ 2

Интерфейс не является базовым. Интерфейсы не являются частью дерева наследования.

Чтобы получить доступ к списку интерфейсов, вы можете использовать:

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))) {
    // ...
}

Ответ 3

В дополнение к тому, что написал другие плакаты, вы можете получить первый интерфейс из списка GetInterface() (если список не пуст), чтобы получить прямой родительский элемент IFoo. Это будет точный эквивалент вашей попытки .BaseType.