2011-04-02 12 views

Respuesta

26

Una variable se escribe como object por el compilador y todos los miembros de la instancia serán verificados como válidos por el compilador. La otra variable se escribe como dynamic y todos los miembros de la instancia serán ignorados por el compilador y el DLR los llamará en el momento de la ejecución.

No tiene nada que ver con el rendimiento o la asignación de memoria. El tipo dynamic es un tipo estático que el compilador ignora en cierto modo. Le da la capacidad de usar duck typing en un lenguaje estáticamente tipado que proporciona mucha flexibilidad (especialmente cuando se trata de componentes escritos en idiomas que son más dinámicos).

Sin duda recomiendo que lea sobre los siguientes temas:

17

object es válida para todas las versiones de .NET.

Es el tipo base del que todos los demás tipos heredan, por lo que cualquier tipo se puede convertir a object.

No se puede agregar y cambiar dinámicamente nada en una variable declarada como object.

La declaración está tipada estáticamente y comprobada por el compilador.

dynamic es nuevo para .NET 4.0.

Le permite agregar y cambiar dinámicamente propiedades y métodos sin que el compilador los revise (por lo que si lo que escribió es incorrecto, solo lo encontrará en tiempo de ejecución).


En términos de asignación de memoria, no hay mucha diferencia. Ambos son tipos de referencia y cualquier objeto asignado a cualquiera ya tendrá memoria asignada para almacenarlo.

En cuanto al rendimiento, ya que el DLR se involucra con dynamic, habrá una sobrecarga. Tendrá que probar y ver.

En cuanto a otros beneficios, dynamic realmente ayuda con la legibilidad cuando se trata de objetos/datos dinámicos, por ejemplo, archivos XML. También ayuda con la reflexión de una manera similar.

Por supuesto, si usted quiere tener objetos dinámicos, no se puede utilizar object y tienen utilizar dynamic.

0

La palabra clave dinámica también agrega cierta sobrecarga al tiempo de ejecución, debido a toda la lógica adicional utilizada, por lo que si no necesita el tiempo de ejecución dinámico o interoperabilidad y puede usar el objeto, su código será más eficiente.

Más información sobre la dinámica de palabras clave se puede encontrar en el libro de Jeff Richter: CLR via C#, 3rd Edition

Sam gentil hizo un par de entradas acerca de los detalles también:

Cuestiones relacionadas