Преимущества реализации интерфейса

по вызову работавший для меня. мой код похож:

const stubFnc = sinon.stub(myObject, "myFunction");
stubFnc.onCall(0).returns(mockObject1);
stubFnc.onCall(1).returns(mockObject2);
15
задан RRUZ 7 September 2009 в 13:31
поделиться

6 ответов

Вы сможете передать свой объект методу (или удовлетворить ограничение типа), который ожидает интерфейс в качестве аргумента. C # не поддерживает « утиный ввод ». Просто написав методы, определенные интерфейсом, объект не будет автоматически "совместим" с типом интерфейса:

public void PrintCollection<T>(IEnumerable<T> collection) {
    foreach (var x in collection)
       Console.WriteLine(x);
}

Если List не реализовал IEnumerable , вы не сможете передать его в качестве аргумента методу PrintCollection (даже если бы у него был метод GetEnumerator ).

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

26
ответ дан 30 November 2019 в 23:55
поделиться

Это поможет, если вы попытаетесь:

  • Модульный тест с заглушками / моковыми объектами
  • Реализовать внедрение зависимостей
  • Решить голод в мире (хотя это не доказано!)

Доброта,

Дэн

12
ответ дан 30 November 2019 в 23:55
поделиться

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

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

2
ответ дан 30 November 2019 в 23:55
поделиться

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

1
ответ дан 30 November 2019 в 23:55
поделиться

Основное преимущество заключается в удобочитаемости кода, удобстве сопровождения кода и «семантике» кода.

  • Читаемость кода: Интерфейс представляет собой декларацию о намерениях. Он определяет возможности вашего класса, то, что ваш класс способен делать. Если вы реализуете ISortable, вы четко заявляете, что ваш класс можно сортировать, то же самое для IRenderable или IConvertible.
  • Семантика кода: Предоставляя интерфейсы и реализуя их, вы активно разделяете концепции аналогичным образом HTML и CSS делает. Класс - это конкретная реализация «объектного класса» некоторого способа представления реальности путем моделирования общих свойств реальных объектов или концепций. Интерфейс определяет модель поведения, определение того, что может делать объект. Разделение этих понятий делает семантику вашего кода более ясной. Таким образом, некоторым методам может потребоваться экземпляр класса животных, в то время как другие могут принять любой объект, который вы им бросите, если он поддерживает "ходьбу".
  • Поддерживаемость кода: Интерфейсы помогают уменьшить взаимосвязь и, следовательно, позволяют вам легко обмениваться реализациями одной и той же концепции, не затрагивая базовый код. Вы можете легко изменить реализацию IMessage, определив новый класс, реализующий интерфейс. Сравните это с систематической заменой всех ссылок из CMessage на CMyNewMessageClass.
17
ответ дан 30 November 2019 в 23:55
поделиться

Интерфейс является ссылочным типом и содержит только абстрактные элементы. Членами интерфейса могут быть события, методы, свойства и индексаторы. Но интерфейс содержит только объявление для своих членов. Любая реализация должна быть помещена в класс, который их реализует. Интерфейс не может содержать константы, поля данных, конструкторы, деструкторы и статические члены. Все объявления членов внутри интерфейса неявно общедоступны.

1
ответ дан 30 November 2019 в 23:55
поделиться
Другие вопросы по тегам:

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