Novedades lenguaje C# 3.0 (II): Tipos anónimos

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.

Archivado en:
Comparte este post:

Comentarios

# Jaime said:

Estoy empezando en esto de C# y tu artículo me ha ayudado.....gracias

Tuesday, January 22, 2008 8:20 PM
# José M. Alarcón Aguín said:

Me alegro de que te haya servido Jaime.

Si buscas en www.jasoft.org verás que tengo muchos más por el estilo, también de C# 2.0.

Y aprovecho la ocasión para recomendar fervientemente el libro de Octacio Hernández "C# 3.0 y LINQ" de Krasis Press (www.campusmvp.com/.../C_Sharp_3.0_y_LINQ.htm) . En él estos conceptos se amplían al máximo y se aprende a sacar partido a toda la potencia de LINQ

Saludos

JM.

Tuesday, January 22, 2008 8:56 PM
# Antonio said:

Tengo el libro de Octavio Hernández sobre LINQ y me parece magnífico.

Tuesday, March 11, 2008 2:36 PM
# Arturo Castillo said:

Me interesa el libro pero soy de mexico.. lo estaran distribuyendo en mi pasi

gracias saludos

Wednesday, April 30, 2008 1:43 AM
# José M. Alarcón Aguín said:

Hola Arturo:

El libro estará disponible dentro de poco tiempo (espero) en América por lo que si estás interesado lo mejor es que te pongas en contacto con la editorial (www.krasispress.com) y que les pidas que te avisen cuando así sea ¿ok?

gracias.

Saludos

JM

Wednesday, April 30, 2008 10:15 PM