el Guille, la Web del Visual Basic, C#, .NET y más...

Novedades de Visual Basic 9.0

(Parte 6 de 9)

 
Publicado el 22/Jul/2007
Actualizado el 22/Jul/2007
Autor: Guillermo 'guille' Som

Novedades de Visual Basic 9.0 (Parte 6 de 9): Inicialización de objetos. Inicializar arrays o colecciones.



 

Inicialización de objetos

En inglés: Object initializers. Esto... bueno, esto es "lo más" (o casi). Aunque en esta versión, al menos para Visual Basic, no estará con todas las características que debería tener y por tanto, tendremos que esperar a una nueva versión (pa variá), aunque los "afortunados" de C# si que tendrán todas (o casi) las características de la inicialización de objetos y colecciones.

Te explico, con la inicialización de objetos lo que puedes hacer es crear un objeto, pero "inicializándolo" al mismo tiempo, es decir, crear un objeto y asignarle los valores a las propiedades o campos públicos.

Y no te confundas, que lo mismo piensas que con New (el constructor) ya lo podemos hacer. Pero no es lo mismo, veamos un par de ejemplos, para que te "aclares".

Para este ejemplo vamos a usar una clase "Colega" muy simple:

Class Colega
    Public Nombre As String
    Public Correo As String
    Public Telefono As String

    Public Overrides Function ToString() As String
        Return Nombre & ", " & Correo & " (" & Telefono & ")"
    End Function
End Class

Si quieres crear un objeto y asignar, por ejemplo el nombre, tendrías que hacer algo así:

Dim colega1 As New Colega
colega1.Nombre = "Pepe"

Pues con la inicialización de objetos, eso mismo lo puedes hacer así:

Dim colega2 = New Colega With {.Nombre = "Pepe"}

Es decir, usa With seguido de una llave de apertura y asigna a las propiedades que quieras asignar los valores y después cierras la llave.

Como ves, no hace falta que exista un constructor que reciba esos parámetros, que sería lo que habría que hacer con Visual Basic 2005 (o anterior).

Lo bueno, es que puedes inicializar cualquiera de las propiedades (o campos públicos, como en este caso), que defina la clase (o tipo). Por ejemplo, si solo quieres inicializar el nombre y el teléfono, puedes hacerlo así:

Dim colega3 = New Colega With {.Telefono = "555-5555-555", .Nombre = "Pepe"}

El orden en el que indiques las "propiedades" no es importante.

Lo que si es importante es que esas propiedades sean de "escritura", es decir, no se pueden inicializar propiedades de solo lectura. Al menos en esta versión, y según dice Paul Vick, habrá que esperar hasta la próxima versión (10 o VBx).

 

Inicializar arrays o colecciones

Esta es otra característica que Visual Basic 9.0 no tendrá... pero que C# 3.0 si que tiene.

Por ejemplo, si quieres inicializar un array de tipo Integer, en C# lo puedes hacer así:

var numeros = new[] { 1, 2, 4, 6, 5, 7, 8, 9 };

Pero en Visual Basic, lo más que puedes hacer es esto:

Dim numeros = New Integer() {1, 2, 4, 6, 5, 7, 8, 9}

Con C# también puedes inicializar asignando objetos, por ejemplo, para declarar e inicializar una colección:

var lista = new List<Colega> { new Colega{ Nombre="Pepe"},
                               new Colega{ Nombre ="Guille"} };

Aunque en Visual Basic puedes usar la función CrearLista, y el código será muy parecido:

Dim lista = CrearLista(New Colega With {.Nombre = "Pepe"}, _
                       New Colega With {.Nombre = "Guille"})

Por supuesto, CrearLista no existe en el lenguaje, pero la puedes definir de esta forma:

Function CrearLista(Of T)(ByVal ParamArray items() As T) As List(Of T)
    Return New List(Of T)(items)
End Function

Y te servirá para iniciar objetos del tipo List(Of loquesea), no es lo mismo que en C#, pero... hace el trabajo.

 

Nota:
El código de CrearLista está "basado/traducido" de en un código de Bill McCarthy, un colega MVP de Visual Basic, en su sitio tiene otra versión de esa función.
(Lo de "traducido" es porque la función original se llamaba MakeList, je, je).

 


Ir al índice de las novedades de Visual Basic 2008 (VB 9.0)


Código de ejemplo (comprimido):

Para bajarte el código, hazlo desde la página principal de
Las Novedades de Visual Basic 9.0 con la CTP de Junio 2007.


 


La fecha/hora en el servidor es: 22/12/2024 16:56:04

La fecha actual GMT (UTC) es: 

©Guillermo 'guille' Som, 1996-2024