lunes, octubre 18, 2010

Introducción a LINQ Parte 3.3 (Arquitectura)

Artículos relacionados:

Parte 1Parte 2Parte 3.1, Parte 3.2

En esta ocasión hablaremos sobre Tipos Anónimos y Métodos de Extensión.

Tipos Anónimos

Son una forma abreviada de inicializadores de objetos que permiten omitir la especificación del tipo cuando se inicializan objetos o colecciones temporales. Por ejemplo en el articulo anterior utilizamos la clase LineaProducto, podríamos omitir la especificación del tipo y por ende eliminar la necesidad de la definición de la clase. Los tipos anónimos son tipos esenciales para las proyecciones de LINQ, las cuales permiten  incorporar el equivalente en LINQ de una lista de campos en una consulta SQL (mediante la instrucción SELECT).

veamos un ejemplo:

C#

image

VB

image

El compilador infiere el tipo de las tuplas, por lo que los objetos resultantes son strongly typed definidos así: IEnumerable<<int, int, decimal>> y IEnumerable(of  VB$AnonymousType_0 (of Integer, Integer, Decimal)) respectivamente.

Métodos de Extensión

Estos permiten agregar métodos propios a tipos previamente definidos, incluso si estos son sealed en C# o NotInheritable en VB. Por ejemplo el tipo string / String es sealed  y tiene varios métodos accesados por (.) como stringTest.Lenght() o “esto es un test”.Lenght(). El compilador trata estas sentencias como si fueran miembros de una librería de funciones como Length(stringTest) o Length(“esto es un test”).

Por ejemplo el método length genera una excepción si el valor es null o nothing. Seria útil tener un método LengthNullable() que retornara int?, Integer? o Nullable(of Integer) que eliminaría la necesidad de revisar si el valor es null o Nothing antes de invocar al método Length. Veamos como se puede hacer utilizando métodos de extensión.

C#

image

Los métodos de extensión deben ser definidos como public static anteponiendo la instrucción this al primer argumento del método el compilador sabe que es un método de extensión, el segundo argumento es el tipo al que aplica el método para este ejemplo string y el tercero es el nombre de la instancia. Los métodos de extensión tienen soporte para IntelliSense.

image 

VB

image

De acuerdo a la documentación de Visual Studio 2008 se pueden aplicar métodos de extensión a los siguientes tipos Clases, Estructuras, Interfaces, Delegados y Arreglos.

Hasta la próxima.

No hay comentarios.:

Publicar un comentario