C# 4.0 – Dynamic
3:17 | Author: Unknown

Una primera aproximación al tipo dynamic introducido en la versión 4.0 de C#

El tipo dynamic nos va a permitir instanciar un objeto en tiempo de ejecución. Con lo que podremos hacer cosas como:

 

            dynamic duck = GetDynamic();

Console.WriteLine(duck.bark());


 



La instanciación se evalúa en tiempo de ejecución por lo que si el objeto devuelto por GetDynamic() no contiene definición del método bark() recibiremos un error en tiempo de ejecución.



Qué diferencia tiene con var? Básicamente var es una asignación por inferencia, o sea que en tiempo de compilación será el compilador el encargado de inferir el tipo de acuerdo al contexto, un par de ejemplos sencillos:



var duck = new Duck();



En este ejemplo sencillamente el compilador infiere que duck es una instancia de la clase Duck;



            var duck = animals.Where(a => a.HasFeather() && a.LegQty() == 2)
.FirstOrDefault();


 



En este ejemplo es un poco más complicado inferir el tipo. Igualmente el compilador lo realizará en tiempo de compilación.



Ahora cual sería la diferencia con el que es la base de nuestra jerarquía de clases object? A simple vista parecería que son similares. Pero recordemos que hasta la versión 4.0 de C# nuestro lenguaje era estáticamente tipado. por lo que utilizar object no hacía que el compilador no verifique el tipo en tiempo de compilación, sino todo lo contrario. Cada vez que el compilador encuentra un object validará que las operación que se realizan con él sean válidas para el tipo casteado. Aquí entran los conceptos de boxing y unboxing.



Veamos ejemplo:



            Object dog = GetObject();
Console.WriteLine(dog.bark());


 



Este ejemplo directamente no compila. object no contiene un método bark()



            Console.WriteLine(((Dog)dog).bark());


 



El precioso mundo del casteo. Aquí vemos que necesariamente en momento de compilación el compilador debe conocer cual es la clase para poder utilizar los métodos que correspondan.



Las posibilidades son infinitas. Como así también salirnos de la tutela de nuestro compilador puede complicarnos la vida.

This entry was posted on 3:17 and is filed under , . You can follow any responses to this entry through the RSS 2.0 feed. You can leave a response, or trackback from your own site.