Tipos dinámicos c#

 

El tipo dynamic permite la comunicación o post de una variable y que se omita la comprobación de tipo en tiempo de compilación. En su lugar, se resuelven estas operaciones en tiempo de ejecución, de la siguiente manera:

 

El tipo dynamic se comporta como el tipo object en la mayoría de las circunstancias, ya que el compilador no resuelve o no comprueba el tipo de las operaciones que contienen expresiones de tipo dynamic.

 

El compilador empaqueta información sobre la operación y esa información se utiliza después para evaluar la operación en tiempo de ejecución. Como parte del proceso, las variables de tipo dynamic están compiladas en las variables de tipo object. Por lo que el tipo dynamic sólo existe en tiempo de compilación, no en tiempo de ejecución.

 

Ejemplo:

 

dynamic d = 1;

var suma = d + 3;

System.Console.WriteLine(suma);

 

 

La ventaja principal de este tipo de dato es que no tenemos que preocuparnos si el objeto obtiene su valor de una API de COM, de un lenguaje dinámico, de DOM (Document Object Model) HTML, de la reflexión o de cualquier otra parte del programa.

 

A continuación podemos ver con el siguiente ejemplo la diferencia entre el tipo de dato obj y el tipo de dato Dynamic

 

Public class Program

{

static void Main(string[] args)

{

dynamic dyn = 1;

object obj = 1;

 

System.Console.WriteLine(dyn.GetType());

System.Console.WriteLine(obj.GetType());

}

}

 

Las instrucciones WriteLine muestran los tipos en tiempo de ejecución de dyn y obj. En ese punto, ambos tienen el mismo tipo, entero. Se produce el siguiente resultado:

 

System.Int32

System.Int32

 

Posteriormente asignamos un nuevo valor a las variables aumentándoles un 2, de la siguiente manera:

 

dyn = dyn + 2;

obj = obj + 2;

 

A continuación el sistema nos muestra un error del compilador que notifica un intento de suma de un entero y un objeto en la expresión obj + 2.

 

Sin embargo, no se notifica ningún error para dyn + 2. En tiempo de compilación no se comprueba la expresión que contiene dyn porque el tipo de dyn es dynamic.

Share: