Здравствуйте, Doc, Вы писали:
Doc>Здравствуйте, _NN_, Вы писали:
_NN>>Представьте, например, что у вас есть большой проект где каждая команда отвечает за свою часть продукта.
_NN>>Теперь, вы меняете базовый интерфейс, нужно поменять код во всех частях проекта, а для этого придётся ещё и получить одобрение на изменение от всех команд.
Doc>Ну да, а так по тихому поменяли контракт. Правда у нас теперь "Периметр()" круга равен "Периметр()" квадрата (возвращаясь к примеру выше), но это мелочи, ведь билд не ломается. 
В каком плане поменяли контракт ?
Вот у нас был код:
public interface IA
{
void F();
}
static class X
{
public UseIAF(IA a)
{
a.F();
}
}
class A : IA
{
public void F() { .. .}
}
Добавляем метод по умолчанию.
Можем использовать G, которого раньше не было.
public interface IA
{
void F();
void G() { }
}
static class X
{
public UseIAF(IA a)
{
a.F();
}
public UseIAG(IA a)
{
a.G();
}
}
В реализации интерфейса ничего не меняется как и ожидалось.
class A : IA
{
public void F() { .. .}
}
Какую проблему вы здесь видите ?
Doc>Плюс, теперь можно валить на собесах вопросом "чем отличается интерфейс от класса"
Интерфейс всё ещё остается интерфейсом.
Наследоваться от двух классов нельзя в отличии от реализации множества интерфейсов.