Re[3]: Breaking change
От: Qbit86 Кипр
Дата: 11.12.22 20:04
Оценка: 18 (1) +7
Здравствуйте, Codealot, Вы писали:

C>Если у тебя такое произойдет, к какому интерфейсу приведешь — такой и должен быть вызван.


Основная мотивация, стоящая за default interface methods — чтобы можно было добавлять методы в интерфейс, не ломая компиляцию существующих имплементоров.
Если ты автор библиотеки и добавляешь в интерфейс метод, то раньше у тебя все пользователи, реализующие интерфейс, ломались; и им нужно было определить у себя добавленный метод.
С добавлением default interface methods — нет, больше не ломаются, и явно реализовывать новый API им не требуется.

Представь, что твой класс TestClass реализует интерфейс ITest с методом Method() и интерфейс ICompletelyDifferentInterface без метода Method().
И потом автор второго интерфейса добавляет туда свой независимый метод Method().

Если использовать текущий подход C#, то есть изначально требовать явное приведение к нужному типу, то никакой неоднозначности не возникнет, и компиляция клиента не сломается.
Если по умолчанию разрешать вызов без приведения, то добавление нового метода Method() сломает компиляцию, то есть defeats the whole idea.
Глаза у меня добрые, но рубашка — смирительная!
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.