Как узнать, является ли интерфейс производным от определенного интерфейса? - PullRequest
3 голосов
/ 21 июля 2010

У меня есть такой интерфейс:

 public interface IViewA : IViewB, IViewC
 {
    byte prop { get; set; }
 }

и у меня есть такой общий метод:

public void OpenPopup<T>(WindowState state)
{
    if ((typeof(T) as IViewC)!=null)
    {
         //Process A
    }
    else
    {
        //Process B
    }

}

Хотя я отправляю T как интерфейс, производный от IViewC, процесс A не обрабатывается.

Итак, как узнать во время выполнения с помощью отражения, является ли интерфейс производным от другого интерфейса?

спасибо

Ответы [ 5 ]

4 голосов
/ 21 июля 2010

Попробуйте следующее

if ( typeof(IViewC).IsAssignableFrom(typeof(T)) { 
  ...
}
2 голосов
/ 21 июля 2010

Попробуйте что-то вроде typeof(IViewC).IsAssignableFrom(typeof(T)).

. Сейчас вы пытаетесь обработать typeof(T), то есть System.Type как IViewC, который не будет работать.

2 голосов
/ 21 июля 2010

Вместо typeof используйте isAssignableFrom.

1 голос
/ 21 июля 2010

typeof(T) as IViewC совершенно неверно. Вы пытаетесь привести значение от Type к IViewC, что всегда будет неудачным, всегда приводя к нулю.

Вам нужно typeof(T).GetInterfaces(), и просмотрите возвращенный список, чтобы увидеть, есть ли там ваш интерфейс.

0 голосов
/ 21 июля 2010
if ((typeof(T) as IViewC)!=null)

Это неправильно. То, что вы написали, проверяет, является ли объект Type, возвращаемый typeof(T), IViewC, что, очевидно, не является.

Вы хотите:

if (typeof(IViewC).IsAssignableFrom(typeof(T))
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...