csharp-dynamics

Cómo usar Dynamics en C#

El tipo dynamic es una funcionalidad introducida en C# 4.0 que permite la programación dinámica. Nos permite resolver tipos y miembros en tiempo de ejecución en lugar de en tiempo de compilación

Es decir, el tipo dynamic es omite la verificación estática de tipos en tiempo de compilación y delega la resolución de tipos y miembros a tiempo de ejecución.

Esto significa que las operaciones sobre variables de tipo dynamic no se validan hasta que el programa se está ejecutando. Esto nos permite permite un gran flexibilidad en ciertos escenarios de programación.

Sin embargo, también tiene muchos detractores. Significa saltarse un poco las pautas del tipado fuerte, lo cuál a muchos desarrolladores no les gusta (de hecho, no tuvo especialmente éxito, y esta un poco en desuso)

Sintaxis básica

El tipo dynamic se declara de manera similar a otros tipos en C#, utilizando la palabra clave dynamic como tipo.

dynamic variable = 10;
variable = "Hello, World!";
variable = new List<int> { 1, 2, 3 };

En este ejemplo, variable puede contener diferentes tipos de valores, y el tipo real de variable se resuelve en tiempo de ejecución.

Operaciones con dynamic

Cuando se realizan operaciones con una variable de tipo dynamic, el compilador no realiza ninguna verificación de tipo. En su lugar, las operaciones se resuelven en tiempo de ejecución.

dynamic valor = 10;
Console.WriteLine(valor + 5); // Operación válida, salida: 15

valor = "Hello";
Console.WriteLine(valor + " World!"); // Operación válida, salida: Hello World!

En el primer caso, valor es tratado como un entero, mientras que en el segundo caso, es tratado como una cadena.

Manejo de excepciones

Dado que las operaciones dynamic se resuelven en tiempo de ejecución, es especialmente importante estar atento a las excepciones que pueden ocurrir por errores de tipo.

try
{
    dynamic valor = "texto";
    int numero = valor; // Provocará una excepción en tiempo de ejecución
}
catch (RuntimeBinderException ex)
{
    Console.WriteLine($"Error: {ex.Message}");
}

Ventajas y desventajas del uso de dynamic

Desventajas

  • Rendimiento: Las operaciones dynamic pueden ser más lentas debido a la necesidad de resolver tipos en tiempo de ejecución.
  • Pérdida de seguridad de tipos: El uso de dynamic omite las comprobaciones de tipo en tiempo de compilación, lo que puede llevar a errores en tiempo de ejecución que serían evitables con tipos estáticamente definidos.
  • Menor claridad: El código con dynamic puede ser más difícil de entender y mantener debido a la falta de información de tipos en tiempo de compilación.

Ejemplos prácticos