PDF de programación - Novedades de Visual Basic 9.0 - Capítulo 4 Características generales del lenguaje (III)

Imágen de pdf Novedades de Visual Basic 9.0 - Capítulo 4 Características generales del lenguaje (III)

Novedades de Visual Basic 9.0 - Capítulo 4 Características generales del lenguaje (III)gráfica de visualizaciones

Publicado el 17 de Julio del 2017
1.463 visualizaciones desde el 17 de Julio del 2017
579,6 KB
26 paginas
Creado hace 14a (21/10/2009)
Novedades de Visual Basic 9.0

Registrado para <Nombre de Usuario>

Capítulo 4
Características generales del lenguaje (III)



Introducción

En este capítulo continuamos con las novedades de Visual Basic 9.0, pero en esta ocasión solo las
podremos usar con la versión 3.5 .NET Framework.

Estas características (al igual que casi todas las novedades de Visual Basic 9.0) tienen su razón de
ser en todo lo referente a LINQ; pero antes de ver qué es LINQ y cómo usarlo desde nuestro lengua-
je favorito, veámoslas con detalle para que nos resulte más fácil comprender lo que he dejado para el
final de este repaso en profundidad a las novedades de Visual Basic 9.0.

Las novedades que veremos en este cuarto capítulo son:

Los tipos anónimos.
Las expresiones lambda o funciones anónimas.






Tipos anónimos

Esta característica nos permite crear nuevos tipos de datos (clases) sin necesidad de definirlos de
forma separada, es decir, podemos crear tipos de datos “al vuelo” y usarlos, en lugar de crear una
instancia de un tipo existente.

Esta peculiaridad nos va a permitir crear clases (los tipos anónimos deben ser tipos por referencia)
cuando necesitemos crear un tipo de datos que tenga ciertas propiedades y que no necesiten estar
relacionadas con una clase existente. En realidad, esto es particularmente útil para la creación de
tipos de datos “personalizados” devueltos por una consulta de LINQ, aunque no necesitamos saber
nada de LINQ para trabajar con estas clases especiales, por eso en este capítulo veremos cuáles son
las peculiaridades de los tipos anónimos, pero usados de una forma más generalizada; cuando lle-
guemos al capítulo de LINQ, retomaremos este tema para entenderlos mejor en el contexto de
LINQ.

Como sabemos, todos los tipos de datos pueden definir métodos, propiedades, eventos, etc. Sin em-
bargo, en los tipos anónimos solo podemos definir propiedades. Las propiedades de los tipos anóni-
mos pueden ser de solo lectura o de lectura/escritura. Este último aspecto, diferencia los tipos anó-
nimos de Visual Basic de los que podemos crear con C#, ya que en C# las propiedades siempre son
de solo lectura.

© Solid Quality™ Press

Pág. 85 de 206

Registrado para <Nombre de Usuario>

Novedades de Visual Basic 9.0

Los tipos anónimos, al igual que el resto de clases de .NET, se derivan directamente de Object, por
tanto, siempre tendrán los métodos que esa clase define, y ésos serán los únicos métodos que
tendrán. El compilador creará definiciones de esos métodos, que tendrán en cuenta las propiedades
del tipo anónimo, pero como veremos en un momento, esas definiciones dependerán de cómo decla-
remos las propiedades.



Definir un tipo anónimo

Como su nombre indica, los tipos anónimos no están relacionados con ningún tipo de datos existen-
te; éstos siempre se crean asignando el tipo a una variable y ésta infiere el tipo, que en realidad no es
anónimo, ya que el compilador de Visual Basic le da un nombre; lo que ocurre es que no tenemos
forma de saber cuál es ese nombre, por tanto, nunca podremos crear nuevas variables de un tipo
anónimo de la forma tradicional, puesto que al ser anónimo, no podemos usar la cláusula As para
definirlos. Para clarificar la forma de crear los tipos anónimos veamos un ejemplo.

En el listado 4.1 tenemos la definición de un tipo anónimo, el cual asignamos a una variable. Como
vemos en ese código, para crear el tipo anónimo tenemos que usar la inicialización de objetos, pero
a diferencia de usarla como vimos en el capítulo anterior, no podemos indicar el tipo de datos, ya
que es un tipo anónimo.



Dim ta1 = New With {.Nombre = "Guille", .Edad = 50}

Listado 4.1. Definición de un tipo anónimo

El código del listado 4.1 crea una clase anónima con dos propiedades; los tipos de datos de dichas
propiedades se infieren según el valor que le asignemos; esta inferencia de tipos siempre se hará de
la forma adecuada, incluso si tenemos desactivado Option Infer.

La variable ta1 es una instancia del tipo anónimo que acabamos de definir y tendrá dos propiedades,
una llamada Nombre que es de tipo String y la otra, Edad que es de tipo Integer.

Cuando definimos un tipo anónimo de esta forma, las propiedades son de lectura/escritura, por tan-
to, podemos cambiar el contenido de las mismas, tal como vemos en el listado 4.2.



ta1.Edad = 51

Listado 4.2. De forma predeterminada, las propiedades de los tipos anónimos son de lectura/escritura

Como ya comenté, Visual Basic redefine los métodos heredados de Object para adecuarlos al tipo
de datos que acabamos de definir. De estos métodos, solo la implementación de ToString siempre
tiene el mismo formato, que consiste en devolver una cadena cuyo contenido tendrá esta forma:
{ Propiedad = Valor[, Propiedad = Valor] }, es decir, dentro de un par de llaves incluirá el nombre
de la propiedad, un signo igual y el valor; si hay más de una propiedad, las restantes las mostrará

Pág. 86 de 206

© Solid Quality™ Press

Novedades de Visual Basic 9.0

Registrado para <Nombre de Usuario>

separadas por una coma. Después de la asignación del listado 4.2, una llamada al método ToString
de la variable ta1 devolverá el siguiente valor:

{ Nombre = Guille, Edad = 51 }



¿Cómo de anónimos son los tipos anónimos?

En realidad, los tipos anónimos no son “totalmente” anónimos, al menos en el sentido de que sí tie-
nen un nombre, lo que ocurre es que ese nombre no estará a nuestra disposición, ya que el compila-
dor genera un nombre para uso interno. El tipo anónimo definido en el listado 4.1 tendrá el nombre
VB$AnonymousType_0, pero ese nombre solo es para uso interno, por tanto, no podremos usarlo
para crear nuevas clases de ese mismo tipo (incluso si pudiéramos definir variables con ese nombre,
el compilador no lo permitiría, ya que se usan caracteres no válidos para los nombres de variables o
tipos, recordemos que el signo $ se utiliza en Visual Basic para indicar que una variable es de tipo
String, por tanto, al encontrar ese signo acabaría la declaración del nombre del tipo).

Pero si nuestra intención es crear más variables del mismo tipo anónimo, lo único que tendremos
que hacer es definir otra variable usando un tipo anónimo con las mismas propiedades, de esa forma,
el compilador reutilizará el tipo anónimo que previamente había definido.

En el código del listado 4.3 la variable ta2 también tendrá una instancia de un tipo anónimo, pero
debido a que las propiedades se llaman igual, son del mismo tipo y están en el mismo orden que el
definido en el listado 4.1, el compilador no creará otro tipo anónimo, sino que reutilizará el que de-
finió para la variable ta1.



Dim ta2 = New With {.Nombre = "David", .Edad = 28}


Listado 4.3. Este tipo anónimo es el mismo que el del listado 4.1

Cada vez que el compilador se encuentra con un tipo anónimo que tiene las mismas propiedades
(nombre, tipo y orden de declaración) de otro definido previamente en el mismo ensamblado, usará
el que ya tiene definido, pero si cualquiera de esas tres condiciones cambia, creará un nuevo tipo.

Por ejemplo, el compilador creará un nuevo tipo para el que definimos en el listado 4.4, porque aun-
que tiene dos propiedades que se llaman igual y son del mismo tipo que el de los listados anteriores,
el orden en que están definidas esas propiedades es diferente, por tanto, lo considera como otro tipo
de datos.



Dim ta3 = New With {.Edad = 24, .Nombre = "Guille"}


Listado 4.4. Si el orden de las propiedades es diferente, se crea otro tipo anónimo

© Solid Quality™ Press

Pág. 87 de 206

Registrado para <Nombre de Usuario>

Novedades de Visual Basic 9.0

La explicación a esta extraña forma de actuar es porque, en realidad, el compilador define los tipos
anónimos como tipos generic y en estos dos casos concretos, la definición de los dos tipos es como
vemos en el listado 4.5. Ese código es el generado por el compilador, que como sabemos lo genera
usando el lenguaje intermedio de Microsoft (MSIL, Microsoft Intermediate Language o IL) que es
el que finalmente compila el CLR cuando ejecutamos la aplicación, y que tiene una sintaxis muy
parecida a C#; en el listado 4.6 tenemos el equivalente al estilo de cómo lo definiríamos en Visual
Basic.



class VB$AnonymousType_0`2<string, int32>
class VB$AnonymousType_1`2<int32, string>

Listado 4.5. Definición de los dos tipos anónimos en lenguaje IL



Class VB$AnonymousType_0(Of String, Integer)
Class VB$AnonymousType_1(Of Integer, String)

Listado 4.6. Definición de los dos tipos anónimos al estilo de Visual Basic

En realidad, la definición de los tipos anónimos no usan los tipos de datos explícitos de las propi e-
dades, ya que el compilador define esos tipos como generic. Lo que en realidad ocurre, es que, aun-
que las propiedades se llamen igual, al estar definidas en un orden diferente, la asignación de los
tipos generic usados se invertirían y el resultado no sería el deseado.

Para que lo entendamos mejor, el seudocódigo al estilo de Visual Basic de la definición de esos dos
tipos sería como el mostrado en el listado 4.7, y como vemos, la propiedad Edad de la primera clase
es del tipo T0, mientras que en la segunda clase es del tipo T1, por tanto, si se usara un solo tipo
anónimo, los tipos usados no coincidirían en las dos declaraciones.



Class VBAnonymousType_0(Of T0, T1)
Public Nombre As T0
Public Edad As T1
End Class

Class VBAnonymousType_1(Of T0, T1)
Public Edad As T0
Public Nombre As T1
End Class


Listado 4.7. Los tipos anónimos se definen como tipos generic y cada propiedad es del tipo indicado según
  • Links de descarga
http://lwp-l.com/pdf5509

Comentarios de: Novedades de Visual Basic 9.0 - Capítulo 4 Características generales del lenguaje (III) (0)


No hay comentarios
 

Comentar...

Nombre
Correo (no se visualiza en la web)
Valoración
Comentarios...
CerrarCerrar
CerrarCerrar
Cerrar

Tienes que ser un usuario registrado para poder insertar imágenes, archivos y/o videos.

Puedes registrarte o validarte desde aquí.

Codigo
Negrita
Subrayado
Tachado
Cursiva
Insertar enlace
Imagen externa
Emoticon
Tabular
Centrar
Titulo
Linea
Disminuir
Aumentar
Vista preliminar
sonreir
dientes
lengua
guiño
enfadado
confundido
llorar
avergonzado
sorprendido
triste
sol
estrella
jarra
camara
taza de cafe
email
beso
bombilla
amor
mal
bien
Es necesario revisar y aceptar las políticas de privacidad