Здравствуйте, Doc, Вы писали:
Doc>Абстрактный класс не интерфейс. Он поддерживает какой-то уровень абстракции, но при этом обладает реализацией и состоянием. Поэтому пункты выше в большей части к нему не применимы.
Применимы. Уровень абстракции достаточно условный и абстрактный класс в общем случае не обязан чем-то отличаться от интерфейсов.
Есть Stream и унаследованные от него MemoryStream, FileStream и какой-нибудь NetworkStream.
Много вот Stream знает про реализацию всего этого добра?
Метод расширения не является аналогом фичи по той причине, что он для всех реализаций интерфейса/наследников класса будет одинаковый,
а человекам нужно поведение по умолчанию с возможность перегрузки для конкретных реализаций.
Если в абстрактном классе добавить виртуальный метод с реализацией, то его добавление так же никто не заметит и не узнает, что можно теперь что-то перегрузить.
Doc>- Можно было бы реализовать не трогая интерфейсы через абстрактные классы.
Doc>- У фичи достаточно узкая область применения, чтобы говорить что это замена множественного наследования.
Было бы множественное наследование — думаю, что и фичу бы не добавляли, т.к. было бы доступно это всё через классы сделать.
По сути эта фича приближает интерфейсы к абстрактным классам и есть смысл это использовать там, где не получается взять классы.
Doc>- Но раз вы сами говорите что обсуждаемая фича — костыль, то какой смысл дальше обсуждать. Хороший код/фичу костылем не назовут
Ну, я просто не согласен, что у фичи есть полная альтернатива в языке.
Какой-нибудь "override new" для меня тоже костыль и я бы в язык это не добавлял, как и реализацию методов в интерфейсах.
Только разработчики языка почему-то со мной не советуются