Здравствуйте, Codealot, Вы писали:
C>Здравствуйте, xpalex, Вы писали:
X>>Пока нет объекта какой смысл в наследовании?
C>Никогда не видел такое?
C>C> public MyException()
C> {
C> }
C> public MyException(string? message) : base(message)
C> {
C> }
C> public MyException(string? message, Exception? innerException) : base(message, innerException)
C> {
C> }
C> ...
C>
Тут сразу несколько впросов появляется. Я понимаю когда в System.Exception предоставляют три варианта конструирования объекта. Но зачем их все нужно протаскивать в кастомный тип?
Для оберточного исключения, когда мы прячем сбой в кишках и экспортируем наружу только тип исключения своей библиотеки, достаточно третьей формы.
Если же вы пишите логику на исключениях, то вам будет достаточно первой или второй формы. Но вот что бы нужно было больше одной... Это какой-то карго культ — "сделать как в системной библиотеке"...
X>>Конструируют объекты обычно фабрики и DI контейнеры.
C>Обычно? Страшно даже смотреть на твой код.
90% new за пределами фабрик и контейнеров это конструирование DTO. Вы используете наследование в data-классах? Я их всегда больше как tuple рассматривал, а не как полноценные объекты и типы.
X>>Ну и логически размышляя, если у объектов одинаковые api (т.к. наследование) и одинаковые конструкторы, следовательно у них одинаковые зависимости и следовательно они не отличатся!
C>Л — Логика.
C>Ну поздравляю, ты только что доказал, что наследование вообще не нужно.
C>Серьезно, ты вообще не знаешь как работает наследование что ли?
А оно как-то само работает? Это просто механизм для чьей-то работы с однородными объектами.
Я понимаю, когда C++-ники используют наследование для всего подряд, в том числе и для избавления от дублирования кода. Т.е. когда явного отношения 'is-a' между типами нет, но классы содержат одинаковый код.
Но там это наследие времен когда еще не было лямбд. И попытка в zero-cost абстракции.
В C# я не вижу в этом смысла. Композиция и лямбды решают подобные задачи гораздо легче и понятнее.