Иерархия классов для интерфейсов C#

Я играю вокруг с некоторыми классами и интерфейсами, и разработал простой метод определить иерархию класса, т.е. определить цепочку наследования.

public static void OutputClassHierarchy(Type ty)
{
    if (ty.BaseType == null)
    {
        Console.WriteLine("{0}: Base", ty);
        Console.WriteLine("");
        return;
    }
    Console.WriteLine("{0} : {1}", ty, ty.BaseType);
    OutputClasshierarchy(ty.BaseType);
}

Так, для

OutputClassHierarchy(typeof(System.Exception));

Я получаю вывод:

Система. Исключение: система. Объект

Система. Объект: основа

Который является тем, что я ожидаю.

Но, Если я делаю попытку того же с Интерфейсом, который реализует другой интерфейс, т.е.

interface IMyInterface : IDisposable
{
    void Hello();
}

...

OutputClassHierarchy(typeof(IMyInterface));

Я получаю вывод:

MyNameSpace. IMyInterface: основа

Так, что продолжается здесь? Действительно ли это возможно вывести интерфейсную иерархию, как объявлено выше или не является там такой вещью когда дело доходит до интерфейсов?

Кроме того, где System.Object во всем этом? Я думал, что все было создано на нем.

5
задан James Wiseman 26 February 2010 в 16:10
поделиться

2 ответа

Интерфейсы не являются производными от Object, поэтому это не отобразится при выводе его базы. Вот комментарий Эрика Липперта о вещах, производных от Object (и вещах, преобразуемых в тип Object).

http://blogs.msdn.com/ericlippert/archive/2009/08/06/not-everything-derives-from-object.aspx

Этот ответ SO может помочь ответить на ваш вопрос об интерфейсах, содержащих другие интерфейсы:

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

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

4
ответ дан 14 December 2019 в 04:36
поделиться

интерфейс не имеет единственный основной тип, поскольку он мог осуществить несколько других интерфейсов, например,

public IMyInterface : IDisposable, IComponent

Однако вы можете достигнуть те интерфейсы при помощи метод GetInterfaces :

var interfaces = typeof(IMyInterface).GetInterfaces();
4
ответ дан 14 December 2019 в 04:36
поделиться
Другие вопросы по тегам:

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