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

Для классов HTML5 и CSS3 классы и идентификаторы могут начинаться с цифр.

23
задан Kevin Driedger 11 February 2009 в 20:11
поделиться

3 ответа

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

Редактирование: Если Вы конкретно хотите IBar, можно сделать:

Type type = typeof(IFoo).GetInterface("IBar");
52
ответ дан BFree 28 November 2019 в 22:21
поделиться

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

Для получения доступа к списку интерфейсов можно использовать:

typeof(IFoo).GetInterfaces()

или если Вы знаете имя интерфейса:

typeof(IFoo).GetInterface("IBar")

, Если Вы только интересуетесь знанием, если тип неявно совместим с другим типом (то, которое я подозреваю, - то, что Вы ищете), используйте тип. IsAssignableFrom (fromType). Это эквивалентно из ',' ключевое слово, но с типами выполнения.

Пример:

if(foo is IBar) {
    // ...
}

эквивалентно:

if(typeof(IBar).IsAssignableFrom(foo.GetType())) {
    // ...
}

, Но в Вашем случае, Вы, вероятно, больше интересуетесь:

if(typeof(IBar).IsAssignableFrom(typeof(IFoo))) {
    // ...
}
27
ответ дан Niels van der Rest 28 November 2019 в 22:21
поделиться

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

1
ответ дан Paul-Jan 28 November 2019 в 22:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: