Здравствуйте, Codealot, Вы писали:
C>Ровно наоборот. Как они сделали — нужно делать каст вручную всегда, даже когда никаких конфликтов нет.
Попробуй мыслить в терминах абстракции. Пойми, что раз ты завёл интерфейсы, то работать с классами иже не имеешь права.
Это как раз джамшуты, о которых ты тут смел заикнуться, нахреначивают интерфейсов, а потом говнокодят используя не их, а классы их реализующими, напрямую. Ввел интерфейс — забудь про работу с классами. Прямо сделай себе фабричный метод или используй IoC для ассоциации реализации с интерфейсом и забить о наличии конкретного класса, так как ты работаешь с абстракцией.
Тогда то, что данная фича не рассчитана на добавление реализации в публичный интерфейс классов тебя нисколько не удивит. Если тебе нужен публичны интерфейс класса, не реализуй его через интерфейсы, а пользуйся наследованием реализации.
Я зачастую интерфейсы специально реализую явно, а классы с реализацией делаю internal или private чтобы ни у кого (даже мало квалифицированного) не возникало желание использовать их в обход интерфейсов.
Есть логика намерений и логика обстоятельств, последняя всегда сильнее.