Pregunta

C # 4.0 introduce la palabra clave dynamic , que buscará en tiempo de ejecución.

¿Esto significa que ya no necesitaremos una reflexión incómoda? Si lo hace, ¿puedes mostrar un ejemplo de ello?

¿Fue útil?

Solución

Todavía tendremos Reflection: el uso de 'dinámico' contra objetos CLR normales invocará un despachador basado en Reflection.

Entonces, todavía tendremos Reflection, pero será más fácil de hacer.

Aquí hay un ejemplo:

// 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);

No sé sobre ti, pero me gusta lo primero. =)

En estos dos casos, no obtengo una verificación en tiempo de compilación, ni Intellisense, ni IDE, pero el primer caso es mucho más expresivo que el segundo.

Otros consejos

El envío dinámico es solo un uso posible de Reflexión. Hay muchas buenas razones para interrogar a una clase por su estructura, obtener información sobre esa estructura y visualizarla de alguna forma o actuar de alguna manera sin tener que acceder dinámicamente a los miembros. La reflexión llegó para quedarse. :)

Si desea ejemplos de la palabra clave dinámica, aquí hay un video de PDC de el hombre mismo hablando de ello (y otras cosas C # 4.0 relacionado).

Dynamic recorrerá un largo camino para resolver problemas con métodos conocidos solo por su nombre, donde ese nombre es conocido y fijo en el momento de la compilación, pero, por supuesto, dichos métodos también podrían expresarse como interfaces si controla los tipos.

Hay casos en que dynamic no ayudaría en absoluto:

  • donde el nombre del método no se conoce en el momento de la compilación (es decir, se carga desde la entrada de configuración / usuario)
  • creación de objetos
  • quizás algunos escenarios genéricos

Los usos más importantes que veo para dynamic son:

  • interoperabilidad COM (obviamente)
  • soporte de operador genérico
  • escribiendo pato donde no hay una interfaz común
  • interoperabilidad DLR (ver comentarios)

Pero definitivamente no resuelve todos los problemas de reflexión.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top