C# Интерфейс

Интерфейс определяет синтаксический контракт, которого должны придерживаться все классы при наследовании интерфейса. Интерфейс определяет синтаксический контракт."Что это такое"Отчасти производные классы определяют синтаксический контракт"Как это сделать"часть.

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

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

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

Сам интерфейс не реализует никакой функциональности; он лишь устанавливает контракт с объектом, который объявляет о реализации интерфейса, указывая, какое поведение должно быть реализовано.

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


Определение интерфейса: MyInterface.cs

Использование интерфейсаinterfaceОбъявление ключевого слова, которое похоже на объявление класса. Объявления интерфейсов по умолчанию являются public. Ниже приведён пример объявления интерфейса:

interface IMyInterface
{
    void MethodToImplement();
}

Приведённый выше код определяет интерфейс IMyInterface. Обычно имена интерфейсов начинаются сIбуквы I. Этот интерфейс имеет только один метод, MethodToImplement(), без параметров и без возвращаемого значения. Конечно, мы можем задавать параметры и возвращаемые значения по необходимости.

Стоит отметить, что этот метод не имеет конкретной реализации.

Далее реализуем вышеуказанный интерфейс: InterfaceImplementer.cs

Пример

using System;

interface IMyInterface
{
        // Члены интерфейса
    void MethodToImplement();
}

class InterfaceImplementer : IMyInterface
{
    static void Main()
    {
        InterfaceImplementer iImp = new InterfaceImplementer();
        iImp.MethodToImplement();
    }

    public void MethodToImplement()
    {
        Console.WriteLine("MethodToImplement() called.");
    }
}

Класс InterfaceImplementer реализует интерфейс IMyInterface. Реализация интерфейса по синтаксису похожа на наследование классов:

class InterfaceImplementer : IMyInterface

После наследования интерфейса нам нужно реализовать метод интерфейса MethodToImplement(). Имя метода должно совпадать с именем метода, определённым в интерфейсе.


Наследование интерфейсов: InterfaceInheritance.cs

В следующем примере определяются два интерфейса, IMyInterface и IParentInterface.

Если интерфейс наследует другие интерфейсы, то реализующий класс или структура должны реализовать все члены интерфейсов.

В следующем примере IMyInterface наследует интерфейс IParentInterface; следовательно, класс реализации интерфейса должен реализовать методы MethodToImplement() и ParentInterfaceMethod():

Пример

using System;

interface IParentInterface
{
    void ParentInterfaceMethod();
}

interface IMyInterface : IParentInterface
{
    void MethodToImplement();
}

class InterfaceImplementer : IMyInterface
{
    static void Main()
    {
        InterfaceImplementer iImp = new InterfaceImplementer();
        iImp.MethodToImplement();
        iImp.ParentInterfaceMethod();
    }

    public void MethodToImplement()
    {
        Console.WriteLine("MethodToImplement() called.");
    }

    public void ParentInterfaceMethod()
    {
        Console.WriteLine("ParentInterfaceMethod() вызван.");
    }
}

Результат вывода примера:

MethodToImplement() called.
ParentInterfaceMethod() called.
Другие расширения