Наследование интерфейсов

36

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

Таким образом, интерфейсы могут быть организованы в иерархии. Как и в иерархии классов, в иерархии интерфейсов, когда какой-то интерфейс расширяет существующий, он наследует все абстрактные члены своего родителя (или родителей). Конечно, в отличие от классов, производные интерфейсы никогда не наследуют саму реализацию. Вместо этого они просто расширяют собственное определение за счет добавления дополнительных абстрактных членов.

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

using System;

namespace ConsoleApplication1
{
    public interface A
    {
        int Sum();
    }

    // Унаследованный интерфейс
    public interface B : A
    {
        int Del();
    }

    class MyOperation : B
    {
        int x = 10, y = 5;

        public int Sum()
        {
            return x + y;
        }

        public int Del()
        {
            return x / y;
        }
    }

    class Program
    {
        static void Main()
        {
        }
    }
}

Обратите внимание, что класс MyOperation реализует методы обоих интерфейсов, иначе возникла бы ошибка при компиляции:

Ошибка при отсутствии реализации метода базового интерфейса

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

Пройди тесты
Лучший чат для C# программистов