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

Классическое объяснение состоит в том, что «интерфейс - это контракт». Это то, что ожидают услышать люди, берущие интервью у вас при приеме на работу. Но что означает «интерфейс = контракт»?

Ну, во-первых, мы знаем, что интерфейсы содержат специальный формат кода, который сам не выполняет никаких задач, то есть интерфейс может иметь сигнатуры методов (начальная часть метода), но вся функциональность кода отсутствует! Фактический код метода содержится в классе, который только реализует интерфейс.

Примечание: интерфейсы не наследуются, а вместо этого реализованы. C # не поддерживает множественное наследование (вы вызываете наследование только от одного базового класса), но поддерживает реализацию нескольких интерфейсов.

// The interface
// Notice that the interface only has a method signature. The method has no body.
public interface IExampleInterface
{
    void MyMethod(string param1, string param2);
}

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

// The class
// Implement the interface by having the class "inherit" it.
public class MyExampleClass : IExampleInterface
{
    public void MyMethod(string param1, string param2)
    {
        // do something
    }
}
// Notice that the method signature here is exactly the same as        the one in the interface.

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

Хорошим примером того, как работает этот контракт, было бы посмотреть, как работает франчайзинговый бизнес.

Многие люди покровительствуют конкретным компаниям из-за «узнаваемости бренда». Подумайте о крупном сетевом предприятии рядом с вами. Возьмем, к примеру, Starbucks, поскольку Starbucks зарекомендовала себя как известная кофейня, где вы гарантированно получите определенный уровень обслуживания и качество продукта.

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

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

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