Duck Typing
То, на что вы ссылаетесь, называется " типизирование утки " (названо в честь идиомы "если оно похоже на утку и крякает как утка, то это должна быть утка") .
В случае утилитарной утечки реализация интерфейса неявна после того, как вы внедрили соответствующие элементы (как вы описываете), однако .NET в настоящее время не имеет широкой поддержки для этого.
С появлением новых функций динамического языка, запланированных на будущее, я не удивлюсь, если это будет изначально поддерживаться средой выполнения в ближайшем будущем.
В то же время вы можете синтезировать типизацию утки с помощью рефлексии с библиотекой, такой как эта , которая позволила бы вам выполнять приведение с утиной типизацией так:
Некоторые мелочи
Интересно, что в C # сегодня есть одно маленькое место, в котором вводится утка - оператор foreach
. Кшиштоф Квалина заявляет , что для того, чтобы быть перечисляемым оператором foreach
, класс должен:
Предоставить публичный метод GetEnumerator
который не принимает параметров и возвращает
тип, имеющий два члена: а) метод
MoveMext, который не принимает параметров и
вернуть логическое значение, и б) свойство
Ток с геттером, который возвращает
Объект.
Обратите внимание, что он не упоминает ни IEnumerable
, ни IEnumerator
. Хотя эти интерфейсы обычно реализуются при создании перечислимого класса, если вы отбросили интерфейсы, но оставили реализацию, ваш класс все равно был бы перечислимым на foreach
. Вуаля! Duck-типирование! ( Пример кода здесь .)