Siguiendo con las serie de post sobre C# 3.0 y sus novedades hoy le toca el turno a los tipos anónimos.

Los tipos anónimos nos permiten definir clases de un solo uso dinámicamente, lo cual tiene una importancia vital en el manejo de resultados de consultas LINQ. De hecho, si no me equivoco, se añadieron al lenguaje precisamente para ello.

Una clase anónima se define con la palabra clave new, igual que una clase normal, pero no se le da nombre (de ahí lo de anónima) y se crea sobre la marcha a partir de los datos que se le pasen al constructor. Por ejemplo:

var nuevoMVP = new { Nombre = "José Manuel Alarcón", Especialidad = "ASP.NET", PrimerAño = 2004 };

Ahora ya podemos usar la variable 'nuevoMVP' como si hubiésemos instanciado una clase definida en el código de manera normal, por ejemplo:

Console.Write(nuevoMVP.Nombre);

Esto permite manejar datos "sintetizados" dinámicamente como resultados de consultas LINQ que contengan campos arbitrarios obtenidos desde la fuente de datos subyacente.

Como puedes suponer, realmente no son anónimos. Si usas reflexión (o directamente desemsamblas un código que los use) verás que el compilador genera internamente una clase con un nombre "raro" (como en el caso de las propiedades automáticas), lo que pasa que para el uso que hacemos es completamente irrelevante.

Otro detalle es que, en realidad, se denominan tipos anónimos inmutables. Ello se debe a que no se pueden modificar sus valores (las propiedades creadas son de solo lectura). Como vemos su uso es muy específico y relacionado con lo que comentaba de LINQ.

Por cierto, ¿te has fijado en la forma tan "extraña" de definir la variable que contiene la referencia al tipo anónimo? ¿Qué es eso de 'var'?

Pues es otra de las novedades importantes de C# 3.0 y además una de las más polémicas. Lo explicaré en el próximo post.

Escrito por un humano, no por una IA