VB .NET - Inicializadores de objetos : Tipos nomeados e anônimos. |
Neste artigo vou apresentar uma aplicação VB .NET que cria um calendário via código. |
|
Os inicializadores de objeto permitem especificar as propriedades de um objeto complexo usando uma única expressão. Eles podem ser usados para criar instâncias de tipos nomeados e de tipos anônimo
As declarações de instâncias de tipos nomeados e anônimos podem parecer quase idênticos , mas seus efeitos não são os mesmos.
Cada categoria tem habilidades e restrições próprias.
O exemplo a seguir mostra uma maneira conveniente de declarar e inicializar uma instância de uma classe chamada, Cliente , usando uma lista de inicialização do objeto.
Observe que o nome da classe é especificado após a palavra-chave New :
Dim clienteNomeado = New Cliente With { .Nome = "Macoratti"} |
Um tipo anônimo não tem nenhum nome utilizável. Portanto uma instanciação de um tipo anônimo não pode incluir um nome de classe :
Dim clienteAnonimo = New With { .Nome = "Jose Carlos"} |
Os requisitos e os resultados das duas declarações não são os mesmos.
Para clienteNomeado , uma classe de cliente que tem uma propriedade nome já deve existir, e a declaração cria uma instância dessa classe.
Para clienteAnonimo , o compilador define uma nova classe que tem uma propriedade, uma string chamada Nome, e cria uma nova instância dessa classe.
Tipos nomeados
O inicializadores de objeto fornecem uma maneira simples para chamar o
construtor de um tipo e , em seguida, definir os valores de algumas ou de
todas as propriedades em uma única instrução.
O compilador invoca o construtor apropriado para a instrução : o construtor padrão se nenhum argumento é apresentado , ou um construtor com parâmetros, se um ou mais argumentos são enviados.
Depois
disso , as propriedades especificadas são inicializadas na ordem em que são
apresentados na lista de inicializador .
Cada inicialização na lista do inicializador consiste na atribuição de um
valor inicial a um membro da classe.
Os nomes e tipos de dados dos membros são determinadas quando a classe é definida. Nos exemplos a seguir , a classe Cliente deve existir e deve ter membros Nome e Cidade que podem aceitar valores de strings:
Dim cliente As Cliente = New Cliente With { .Nome = "Macoratti", .Cidade = "Santos"} |
Podemos obter o mesmo resultado usando o seguinte código:
Dim cliente1 As New Cliente With { .Nome = "Macoratti", .Cidade = "Santos" }
|
Essas declarações são equivalentes para o exemplo que cria um objeto Cliente usando o construtor padrão e então especifica os valores iniciais para as propriedades Nome e Cidade usando a instrução With:
Dim cliente2 As New Cliente()
With cliente2
.Nome = "Macoratti"
.Cidade = "Santos"
End With
|
Se a classe Cliente contém um construtor parametrizada que permite que você envie um valor para Nome, por exemplo, você também pode inicializar o objeto Cliente da seguintes formas:
Dim cliente3 As Cliente = New Cliente("Macoratti") With { .Cidade = "Santos"}
' ou
Dim cliente4 As New Cliente("Macoratti") With { .Cidade = "Santos"}
|
Você não tem que inicializar todas as propriedades, como mostra o código a seguir:
Dim clienteAnonimo = New With { .Nome = "Macoratti"} |
Porém, a
lista de inicialização não pode ser vazia. Propriedades não inicializadas
retém seus valores padrão:
Dim clienteAnonimo = New With { .Nome = "Macoratti"} |
Inferência de tipos com tipos nomeados
Você pode otimizar o código para a declaração de cliente1 combinando inicializadores de objetos e inferência de tipo local.
Esse recurso permite que você omita a cláusula As na declaração de variável.
O tipo de dados da variável é inferido a partir do tipo do objeto que é criado pela atribuição.
No exemplo a seguir o tipo de cliente6 é Cliente:
Dim cliente6 = New Cliente With { .Nome = "Macoratti", .Cidade = "Santos"} |
Apenas algumas considerações finais
Inicializadores de objetos podem ser aninhados;
Um membro da classe não pode ser inicializado mais de uma vez na lista de inicializador de objeto;
A lista de inicialização não pode ser vazia;
A instância que está sendo inicializada não pode ser do tipo Object;
Os membros da classe que estão sendo inicializados não podem ser membros estáticos, somente leitura, constantes ou chamadas de método;
Os membros da classe que estão sendo inicializados não podem ser indexados ou qualificado;
Porque a palavra da cruz é loucura para os que perecem; mas para nós, que
somos salvos, é o poder de Deus.
Porque está escrito: Destruirei a sabedoria dos sábios, E aniquilarei a
inteligência dos inteligentes.
1 Coríntios 1:18,19
Veja os
Destaques e novidades do SUPER DVD Visual Basic
(sempre atualizado) : clique e confira !
Quer migrar para o VB .NET ?
Quer aprender C# ??
Quer aprender os conceitos da Programação Orientada a objetos ? Quer aprender o gerar relatórios com o ReportViewer no VS 2013 ? Quer aprender a criar aplicações Web Dinâmicas usando a ASP .NET MVC 5 ?
|
Referências:
Super DVD Vídeo Aulas - Vídeo Aula sobre VB .NET, ASP .NET e C#
Super DVD C# - Recursos de aprendizagens e vídeo aulas para C#
Curso Fundamentos da Programação Orientada a Objetos com VB .NET