dinámica es una nueva función de FrameWork 4.0. La aparición de dinámica ha otorgado a C# las características de un tipo de lenguaje débil. El compilador ya no comprueba el tipo en tiempo de compilación, y el objeto dinámico soporta por defecto cualquier función que desees durante la compilación. Por ejemplo, aunque no sepas nada sobre el objeto devuelto por el método GetDynamicObject, puedes hacer una llamada al código así, y el compilador no informará de un error:
Cuando se trata de un uso correcto, primero hay que señalar un uso incorrecto:
La gente suele usar la palabra clave var para comparar con dinámica. De hecho, var y dinámico son conceptos completamente dos y no deberían compararse en absoluto. Una vez compilado, el tiempo de compilación coincide automáticamente con el tipo real de la variable var y reemplaza la declaración de la variable por el tipo real, lo que parece que estamos declarando el tipo real al codificar. Después de compilar el dinámico, en realidad es un tipo de objeto, pero el compilador hará un trato especial al tipo dinámico, de modo que no realiza ninguna comprobación de tipos durante la compilación, sino que la coloca en tiempo de ejecución.
Esto puede verse en la ventana del editor en Visual Studio. Las variables declaradas como vars soportan "sentido inteligente" porque Visual Studio puede inferir el tipo real de tipos de var, mientras que las variables declaradas como dinámicas no soportan "sentido inteligente" porque el compilador no sabe nada sobre el tipo de su tiempo de ejecución. Usar Intelligent Sense para variables dinámicas indica "Esta acción se resolverá en tiempo de ejecución".
El hecho de que la variable dinámica sea una variable objeto puede verificarse mediante el código IL, y el código IL no se publicará aquí. Por supuesto, el compilador también gestiona declaraciones dinámicas para distinguir entre variables directas de objeto.
dinámico se renderiza ampliamente en MSDN para simplificar la interoperabilidad, y creo que es en esto que algunos desarrolladores son malinterpretados: como muchos desarrolladores no saben usar código como COM+ y desarrollo secundario en OFFICE, necesitan urgentemente una razón de aplicación dinámica. Así que, en el desarrollo diario, creo que la dinámica es valiosa:
Conversión de tipos La transición entre instancias de tipo dinámico y otros tipos de instancias es sencilla, y los desarrolladores pueden cambiar fácilmente entre comportamientos dinámicos y no dinámicos. Cualquier instancia puede convertirse implícitamente en una instancia de tipo dinámico, véase el siguiente ejemplo: dinámico d1 = 7; dinámico d2 = "una cuerda"; dinámico d3 = System.DateTime.Today; dinámico d4 = System.Diagnostics.Process.GetProcesses(); Por el contrario, una conversión implícita puede aplicarse dinámicamente a cualquier expresión de dinámica de tipos. Y viceversa, cualquier expresión de dinámica de tipos también puede convertirse implícitamente en otros tipos. int i = d1; string str = d2; FechaHora dt = d3; System.Diagnostics.Process[] procs = d4; Problema de sobrecarga con parámetros dinámicos de tipo en el método Si se llama a un método pasa un objeto de dinámica de tipos, o el objeto llamado es dinámico de tipos, entonces el juicio de sobrecarga ocurre en tiempo de ejecución y no en tiempo de compilación. DLR de ejecución dinámica en tiempo de ejecución del lenguaje El tiempo de ejecución dinámico del lenguaje es . NET Framework 4 Beta 1 es un nuevo conjunto de APIs que ofrecen soporte para tipos dinámicos en C# y también implementan lenguajes de programación dinámica como IronPython e IronRuby. Dinámica simplifica las reflexiones.
Anteriormente usábamos reflexiones como esta:
Ahora tenemos una forma simplificada de escribir:
Puede que descartemos tal simplificación, después de todo, parece que el código no se ha reducido mucho, pero si tenemos en cuenta las dos características de eficiencia y belleza, entonces las ventajas de la dinámica son evidentes. El compilador optimiza la dinámica para que sea mucho más rápida que la eficiencia de reflexión sin caché. Si tienes que comparar, puedes ejecutar el código de los dos anteriores (la parte de llamar al método de Suma) para 1000000 para sacar una conclusión.
|