Existe alguma diferença entre o `new object () "e o" novo {}` em c#?
-
06-07-2019 - |
Pergunta
em c#,
var x = new {};
declara um tipo anônimo, sem propriedades.Isso é diferente de
var x = new object();
?
Solução
Sim, os tipos usados são diferentes.Você pode dizer isto em tempo de compilação:
var x = new {};
// Won't compile - no implicit conversion from object to the anonymous type
x = new object();
Se você está perguntando se new{}
é sempre útil - bem, isso é um assunto diferente...Eu não penso imediatamente qualquer sensata usos para ele.
Outras dicas
Bem, para iniciantes, o objeto é um tipo real e não anônimo ... se você fizer x.gettype () no segundo exemplo, você receberá o System.Object.
Juntamente com o retorno do GetType, como mencionado, X não seria do objeto de tipo, para que você não pudesse atribuir um tipo de objeto a essa variável.
var x = new { };
var y = new object();
//x = y; //not allowed
y = x; //allowed
A resposta de Jon Skeet era principalmente o que eu queria, mas, por uma questão de completude, aqui estão mais algumas diferenças, obtidas com o refletor:
new {}
substitui três métodos de object
:
Equals
- como mencionado em outras respostas,new object
enew {}
têm tipos diferentes, para que não sejam iguais.GetHashCode
retorna 0 paranew {}
(Mas por que você colocaria em uma mesa de hash, afinal?)ToString
imprime "{}" paranew {}
Infelizmente, não consigo pensar em uma aplicação prática para tudo isso. Eu só estava curioso.