Re[7]: Breaking change
От: _NN_  
Дата: 13.12.22 06:45
Оценка: +2 -1
Здравствуйте, 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>Плюс, теперь можно валить на собесах вопросом "чем отличается интерфейс от класса"


Интерфейс всё ещё остается интерфейсом.
Наследоваться от двух классов нельзя в отличии от реализации множества интерфейсов.
http://rsdn.nemerleweb.com
http://nemerleweb.com
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.