Это большой вопрос. Вот несколько мыслей по этому поводу.
Преимущества
1) VS может обеспечить интеллигентность для ранее использованных динамических элементов, что является лучшим вариантом для IDE.
2) Он более согласуется с другим кодом, что облегчает его чтение и понимание.
3) Он может работать лучше, потому что это слой поверх Reflection
, и поэтому может кэшировать делегатов, тем самым вызывая Reflection
только один раз для члена.
4) Он совместим с такими технологиями, как COM, что не соответствует действительности при использовании Reflection
и устраняет необходимость явного приведения типов между вызовами.
5) Обеспечивает более слабую связь, чем с Reflection
. Возможно переназначить внутренние элементы, не влияя на код, который его потребляет.
6) Можно виртуализировать экземпляр. Вызванные участники фактически не должны существовать. Реализация полностью расширяема и позволяет создавать прокси / фасады, которые скрывают реализации от вызывающей стороны.
Недостатки
1) Легко используется в сценариях, где проверка типа неоправданно теряется. Это так же просто, как набрать ключевое слово против понимания и написать код около Reflection
.
2) Используя красивый синтаксис, невозможно защитить от магических строк.
Я уверен, что больше всего хотелось бы поделиться некоторыми моментами, которые не были подняты.