Stack Overflow em Português Asked by Rodolpho Chagas on November 25, 2021
Qual a diferença entre essas declarações:
Classex xx = new Classex();
var xx = new Classex();
Classex xx;
Se no final consigo usar tudo da mesma forma (métodos, propriedades…)
Ex.:
Eu crio uma lista: List<Classex> lstx = new List<Classex>();
Adiciono alguns valores: lstx.Add(...)
Depois quero pegar alguns valores dessa lista e inserir em outra, qual a melhor maneira de se fazer:
var lstx_filtrada = new List<Classex>;,
List<Classex> lstx_filtrada= new List<Classex>;
List<Classex> lstx_filtrada;
A diferença é:
Classex xx = new Classex();
Você criou uma variável xx
do tipo Classex
que já foi inicializada com uma nova instância de Classex
.
var xx = new Classex();
A mesma coisa do anterior, só que quando você declarou var
você atribuiu ao compilador a responsabilidade de 'descobrir' qual é o tipo de xx
, como já esclarecido na pergunta e resposta referenciada.
Tecnicamente as duas declarações são iguais, mas uma delas (a que usa o var
) é uma forma simplificada de codificar. Se a variável está sendo criada naquele momento e já recebendo o seu valor o compilador infere que o tipo dela será o mesmo tipo do objeto que ela está recebendo.
Classex xx;
Como no primeiro, você especificou explicitamente o tipo da variável. Mas, em qualquer tentativa de uso sem uma inicialização resultará em erro (em alguns casos de compilação inclusive), como já explicado na resposta do Maniero.
Answered by Diego Rafael Souza on November 25, 2021
Sobre o uso do var
ou o tipo explicitamente já foi em respondi em Quando usar var em C#?, por este motivo acho desnecessário postar aqui os dois primeiros exemplos.
A terceira opção você não consegue usar da mesma forma, se tentar usar o objeto uma exceção NullReferenceException
será lançada porque não há um objeto instanciado para a variável. Só poderá ser usado se mais pra frente inicializar o objeto de alguma forma. Sem um objeto formado qualquer acesso a um membro da instância falhará porque não tem nada para acessar. Note que o acesso aos membros da classe (portanto os estáticos) é possível porque não depende de instância.
Em C# 8 passa ser proibida essa forma de declaração, a não ser que mantenha desligado a verificação de objeto nulo, ou declare assim:
Classex? xx;
Answered by Maniero on November 25, 2021
Get help from others!
Recent Answers
Recent Questions
© 2024 TransWikia.com. All rights reserved. Sites we Love: PCI Database, UKBizDB, Menu Kuliner, Sharing RPP