Реализация безопасного ввода утки в C#

Если Вы храбры и желаете к самокрутке, Вы могли бы запустить с библиотеки PostScript и увеличить ее для контакта с PDF, использовав в своих интересах Adobe бесплатная онлайн ссылка PDF .

17
задан Wim Coenen 13 November 2009 в 17:48
поделиться

4 ответа

Как узнать, ходит ли корова как утка и крякает как утка, если перед вами нет живой, дышащей коровы?

Утиная печать - это метод концепция, используемая во время выполнения. Похожая концепция во время компиляции - это структурная типизация , которая, как AFAIK, не поддерживается CLR. (CLR сосредоточен вокруг номинативной типизации .)

[Система структурных типов] контрастирует с номинативными системами, где сравнения основаны на явных объявлениях или именах типов, и утиной типизации, в которой только часть структуры, к которой осуществляется доступ во время выполнения, проверяется на совместимость.

Обычный способ убедиться, что утка не генерирует исключений во время выполнения, - это модульные тесты.

13
ответ дан 30 November 2019 в 13:45
поделиться

DuckTyping для C #

Reflection.Emit используется для генерации IL, который напрямую вызывает исходный объект

Я не думаю, что эта библиотека даст вам представление об ошибках времени компиляции, я не уверен, что это было бы полностью осуществимо. Используйте модульные тесты, чтобы это компенсировать.

5
ответ дан 30 November 2019 в 13:45
поделиться

Я знаю, что неявные интерфейсы (а именно интерфейсы Go) были запланированы для VB 10 (понятия не имею о C #). К сожалению, они были отменены перед выпуском (я думаю, они даже не попали в бета-версию…). Было бы неплохо узнать, появятся ли они в будущей версии .NET.

Конечно, новые динамические типы могут использоваться для достижения того же, но это все еще не самое лучшее. то же самое - неявные интерфейсы по-прежнему допускают строгую типизацию, что я считаю важным.

1
ответ дан 30 November 2019 в 13:45
поделиться

Я не думаю, что есть другой способ получить ошибку времени компиляции.

Однако это то, для чего отлично подходит модульное тестирование. Вы должны написать модульный тест, чтобы убедиться, что

DuckTyper.Adapt<Mallard, IDuck>(mallard);

успешно отображается.

1
ответ дан 30 November 2019 в 13:45
поделиться
Другие вопросы по тегам:

Похожие вопросы: