Object and Array Initializers ou Inicializadores de Objetos e Arrays, foi inserido no Visual Basic 9.0 como parte dos novos recursos necessários na implementação do LINQ. Esse recurso permite que ao instanciar um Objeto seja também possível a sua inicialização de suas propriedades.
Nas versões anteriores quando se desejava trabalhar com um determinado objeto, primeiro era necessário instanciar o objeto e em seguida realizar a inicialização das propriedades deste objeto.
Considerando a classe abaixo:
Exemplo de código em VB para criar uma classe:
Public Class Pais
Dim _nome As String
Dim _area As Double
Dim _populacao As Long
Public Property Nome() As String
Get
Return _nome
End Get
Set(ByVal value As String)
_nome = value
End Set
End Property
Public Property Area() As Double
Get
Return _area
End Get
Set(ByVal value As Double)
_area = value
End Set
End Property
Public Property Populacao() As Long
Get
Return _populacao
End Get
Set(ByVal value As Long)
_populacao = value
End Set
End Property
End Class
Nas versões anteriores do Visual Basic, veja que era necessário criar um nova instancia da classe em seguida realizar a inicialização do mesmo:
Exemplo em VB.Net (8.0) para inicializar uma objeto:
Dim paises As New Pais()
paises.Nome = "Brasil"
paises.Area = 8514877
paises.Populacao = 186767705
Inicializando Objeto
Com a nova versão é possível unir os dois passos acima e um único. Veja como ficaria o exemplo acima no Visual Basic 2008.
Exemplo em Visua Basic 2008 (9.0) utilizando Obect Initializer:
Dim paises as New Pais With {.Nome = "Brasil", _
.Area = 8514877, _
.Populacao = 186767705}
Observe que reduzimos em um única linha de código o que tinhamos escrito em 4. Para que o Visual Basic entenda o uso deste recursos é necessário utilizar With, sem essa Keyword não será possível inicializar um objeto no momento de instanciá-lo.
Não devemos confundir o With para inicializar um objeto com o With..End With Statement, recurso que exisita nas versões anteriores para evita a repetir a referência a um mesmo objeto . Mais detalhes em With...End With Statement (Visual Basic)
Inicializando Objeto Array
Com a Inicialização de Objetos é possível inicializar da mesma forma um Array como mostra o exemplo abaixo:
Exemplo em Visual Basic 2008 (9.0) utilizando Object Array Initializer:
Dim paises() = { _
New Pais With {.Nome = "Palau", .Area = 458, _
.Populacao = 16952}, _
New Pais With {.Nome = "Monaco", .Area = 1.9, _
.Populacao = 31719}, _
New Pais With {.Nome = "Belize", .Area = 22960, _
.Populacao = 219296}, _
New Pais With {.Nome = "Madagascar",
.Area = 587040,
.Populacao = 13670507
}
}
Inicializando Array
Assim como é possível inicializar Objetos e Arrays de Objetos, também é possível fazer o mesmo com Arrays, seguindo a mesma sintaxe.
Veja o exemplo:
Exemplo em Visual Basic 2008 (9.0) Inicializando Array:
dim times() as string = { "Flamengo", "São Paulo", _
"Palmeiras", "Cruzeiro"}
Era isso que eu tinha para falar sobre Object and Array Initializers, tenha bons estudos.
Recursos:
Links:
How to: Declare an Object by Using an Object Initializer
VB.NET 9.0: Object and Array Initializers
Will Visual Basic 9.0 Have Collection Initializers?
Jenner Maciejewsky Rocha
MVP Visual Basic