Если Вы храбры и желаете к самокрутке, Вы могли бы запустить с библиотеки PostScript и увеличить ее для контакта с PDF, использовав в своих интересах Adobe бесплатная онлайн ссылка PDF .
Как узнать, ходит ли корова как утка и крякает как утка, если перед вами нет живой, дышащей коровы?
Утиная печать - это метод концепция, используемая во время выполнения. Похожая концепция во время компиляции - это структурная типизация , которая, как AFAIK, не поддерживается CLR. (CLR сосредоточен вокруг номинативной типизации .)
[Система структурных типов] контрастирует с номинативными системами, где сравнения основаны на явных объявлениях или именах типов, и утиной типизации, в которой только часть структуры, к которой осуществляется доступ во время выполнения, проверяется на совместимость.
Обычный способ убедиться, что утка не генерирует исключений во время выполнения, - это модульные тесты.
Reflection.Emit используется для генерации IL, который напрямую вызывает исходный объект
Я не думаю, что эта библиотека даст вам представление об ошибках времени компиляции, я не уверен, что это было бы полностью осуществимо. Используйте модульные тесты, чтобы это компенсировать.
Я знаю, что неявные интерфейсы (а именно интерфейсы Go) были запланированы для VB 10 (понятия не имею о C #). К сожалению, они были отменены перед выпуском (я думаю, они даже не попали в бета-версию…). Было бы неплохо узнать, появятся ли они в будущей версии .NET.
Конечно, новые динамические
типы могут использоваться для достижения того же, но это все еще не самое лучшее. то же самое - неявные интерфейсы по-прежнему допускают строгую типизацию, что я считаю важным.
Я не думаю, что есть другой способ получить ошибку времени компиляции.
Однако это то, для чего отлично подходит модульное тестирование. Вы должны написать модульный тест, чтобы убедиться, что
DuckTyper.Adapt<Mallard, IDuck>(mallard);
успешно отображается.