Чем отличается типизация утки от старого «варианта» и / или интерфейсов?
Я постоянно вижу фразу «типизирование утки» и даже наткнулся на пример кода или два. Я тожеленивый занят, чтобы сделать мое собственное исследование, может кто-то сказать мне, кратко:
разница между «типом утки» и «вариантным типом» старой школы, иприведите пример того, где я мог бы предпочесть тип утки, а не вариант, ипривести пример того, что я быиметь использовать утку, набрав для выполнения?Я не хочу казаться пташкой, сомневаясь в силе этой «новой» конструкции, и я не уклоняюсь от этой проблемы, отказываясь проводить исследования, но я подавляю все те ажиотажи, о которых я слышал это в последнее время. Это выглядит какнет печатать (или динамический набор) для меня, поэтому я не вижу преимуществ сразу.
ADDENDUM: Спасибо за примеры. Мне кажется, что использование чего-то вроде 'O-> can (Blah)' эквивалентно выполнению поиска по отражению (что, вероятно, недешево) и / или примерно то же самое, что сказать (O - IBlah), что компилятор может Я могу проверить вас, но последний имеет преимущество, заключающееся в том, что мой интерфейс IBlah отличается от вашего интерфейса IBlah, а два других - нет. Конечно, наличие множества крошечных интерфейсов, плавающих вокруг для каждого метода, может привести к путанице, но, опять же, можно проверить множество отдельных методов ...
... так что опять я просто не понимаю. Это фантастическая экономия времени или та же самая старая вещь в новом мешке? Где пример, которыйтребует утка печатать?