У нас все еще будет Reflection - использование 'dynamic' для обычных объектов CLR вызовет диспетчер на основе Reflection.
Итак - у нас все еще будет Reflection, но это будет легче сделать.
Вот пример:
// Via 'dynamic'
dynamic dx = GetSomeCLRObject();
dx.DoSomething();
dx.SomeMember = 2;
// Via Reflection
object x = GetSomeCLRObject();
Type xt = x.GetType();
MemberInfo DoSomethingMethod = xt.GetMethod("DoSomething");
DoSomethingMethod.Invoke(x, null);
PropertyInfo SomeMemberProperty = xt.GetProperty("SomeMember");
SomeMemberProperty.SetValue(x, 2);
Я не знаю как вы, но мне нравится первое. =)
В обоих этих случаях я не получаю ни проверки во время компиляции, ни Intellisense, ни поддержки IDE, но первый случай гораздо более выразителен, чем второй.