Re[7]: Diamond inheritance
От: VladD2 Российская Империя www.nemerle.org
Дата: 15.12.22 22:38
Оценка: +2
Здравствуйте, Codealot, Вы писали:

C>Ровно наоборот. Как они сделали — нужно делать каст вручную всегда, даже когда никаких конфликтов нет.


Попробуй мыслить в терминах абстракции. Пойми, что раз ты завёл интерфейсы, то работать с классами иже не имеешь права.

Это как раз джамшуты, о которых ты тут смел заикнуться, нахреначивают интерфейсов, а потом говнокодят используя не их, а классы их реализующими, напрямую. Ввел интерфейс — забудь про работу с классами. Прямо сделай себе фабричный метод или используй IoC для ассоциации реализации с интерфейсом и забить о наличии конкретного класса, так как ты работаешь с абстракцией.

Тогда то, что данная фича не рассчитана на добавление реализации в публичный интерфейс классов тебя нисколько не удивит. Если тебе нужен публичны интерфейс класса, не реализуй его через интерфейсы, а пользуйся наследованием реализации.

Я зачастую интерфейсы специально реализую явно, а классы с реализацией делаю internal или private чтобы ни у кого (даже мало квалифицированного) не возникало желание использовать их в обход интерфейсов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.
 
Подождите ...
Wait...
Пока на собственное сообщение не было ответов, его можно удалить.