Учитывая объект, как я могу программно сказать, какие интерфейсы он поддерживает? - PullRequest
2 голосов
/ 28 декабря 2008

Учитывая это:

Interface IBase {string X {get;set;}}
Interface ISuper {string Y {get;set;}}

class Base : IBase {etc...}
class Super : Base, ISuper {etc...}

void Questionable (Base b) {
  Console.WriteLine ("The class supports the following interfaces... ")
  // The Magic Happens Here
}

Чем я могу заменить «Магию» для отображения поддерживаемых интерфейсов на объекте b?

Да, я знаю, что благодаря классу Base он поддерживает "IBase", реальная иерархия более сложна, чем эта. :)

Спасибо! -DF5

РЕДАКТИРОВАТЬ: Теперь, когда я увидел ответ, я чувствую себя глупо из-за того, что не запутался через Intellisense. :)

Спасибо всем! -DF5

Ответы [ 4 ]

8 голосов
/ 28 декабря 2008

Магия:

foreach (Type iface in b.GetType().GetInterfaces())
    Console.WriteLine(iface.Name);
8 голосов
/ 28 декабря 2008

b.GetType (). GetInterfaces ()

2 голосов
/ 28 декабря 2008

Хех, я увидел Console.WriteLine и подумал, что вы ищете строковое представление. Здесь это в любом случае

public string GetInterfacesAsString(Type type) { 
  return type.GetInterfaces().Select(t => t.ToString()).Aggregate(x,y => x + "," + y);
}
2 голосов
/ 28 декабря 2008
foreach (var t in b.GetType().GetInterfaces())
{
    Console.WriteLine(t.ToString());
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...