2010-08-05 1 views
4

Моя цель - выяснить, реализует ли класс интерфейс напрямую. В приведенном ниже примере класс B реализует интерфейс IB, а интерфейс IB реализует IA.Как найти иерархию наследования интерфейса для типа?

Как узнать иерархию наследования? Когда мы просматриваем тип в обозревателе объектов, он показывает подробную иерархию. Как я могу достичь аналогичного результата?

interface IA 
{ 
    string Member1 { get;set; } 
} 

interface IB : IA 
{ 
    string Member2 { get; set; } 
} 

class B : IB 
{ 
    public string Member1 { get; set; } 
    public string Member2 { get; set; } 
} 

Отражатель Скриншот

alt text http://img571.imageshack.us/img571/7485/49211426.png

В скриншоте, взятой из отражателя он показывает иерархию интерфейсов, а также.

Как узнать иерархию интерфейса для типа.

+1

http://msdn.microsoft.com/en-us/library/system.type.basetype.aspx –

+0

BaseType of B (typeof (B) .BaseType) возвращает объект – Zuhaib

+0

В этом случае вы знаете, что это не унаследованные любыми другими типами, и вы можете проверить сами интерфейсы ... Как и с методом Type.GetInterfaces (вы можете вызывать его рекурсивно, чтобы получить все интерфейсы - не очень эффективны, но работают). –

ответ

3

Отражение и ядро ​​.NET построены так, чтобы обеспечить быстрый доступ к интерфейсам. Таким образом, Type.GetInterfaces возвращает все интерфейсы, на которые тип может реагировать, «сглаживая» иерархию интерфейса в этом процессе.

Если вы хотите угадать родословную этих интерфейсов, вам также нужно будет вызвать GetInterfaces на каждом интерфейсе. Нет ярлыка, потому что иерархия интерфейсов не имеет большого значения для среды выполнения CLR.