Я бы ответил только на первый вопрос - почему нет общего базового интерфейса для всех интерфейсов?
Прежде всего, нет общего предварительно определенного базового интерфейса для всех интерфейсов, в отличие от случая System.Object.,Объяснение этого может быть очень интересным.
Предположим, вы могли бы иметь общий интерфейс для всех интерфейсов в системе.Это означает, что все интерфейсы должны будут заставить свои реализации предоставлять подробности реализации для этого общего базового интерфейса.В целом, интерфейс используется для придания особого поведения их конкретным классам реализации.Очевидно, что вы хотите определить интерфейс, только когда знаете, что делать, и не знаете, КАК это сделать.Итак, если вы позволите создать общий базовый интерфейс для всех интерфейсов и заставите реализации ожидать, что они предоставят подробную информацию о том, как это сделать - зачем вам это делать?Какую общую задачу должен выполнять каждый класс, который отличается друг от друга?
Давайте посмотрим на другую сторону медали, почему у нас System.object в качестве базового класса любого типа .Net - он прост, он дает вамнекоторые методы, которые имеют ОБЩУЮ реализацию для любого типа .Net и для тех методов, которые могут отличаться от типа к типу, сделали его виртуальным, например: .ToString ()
Возможно, нет предположениялюбой общесистемный метод интерфейса, который является виртуальным / абстрактным для всех его реализаций.
Одна из распространенных практик использования интерфейса - это определение определенного поведения для любого типа.Как будто бы у меня был интерфейс IFlyable, который предоставит Fly () всем типам, которые реализуют IFlyable.Таким образом, я могу играть с любым Flyable-объектом независимо от его иерархии наследования.Я могу написать такой метод ..
public void FlyTheObject(IFlyable flyingObject)
{
flyginObject.Fly();
}
Он не требует от объекта ничего, кроме реализации метода Fly ().
EDIT
Дополнительно, Все интерфейсы будут преобразованы в Object, потому что интерфейсы не могут быть созданы.Объект всегда имеет конкретный класс, который может быть создан.Этот класс может реализовывать или не реализовывать ваш интерфейс, но, как мы знаем, любой тип .Net в конечном итоге основан на System.Object
, поэтому вы сможете перенести экземпляр в тип объекта независимо от того, реализует ли он конкретный интерфейс илинет.