in C#,C'è qualche differenza tra `new object()` e `new {}` in C#?
var x = new {};
dichiara un tipo anonimo senza proprietà. È diverso da
var x = new object();
?
in C#,C'è qualche differenza tra `new object()` e `new {}` in C#?
var x = new {};
dichiara un tipo anonimo senza proprietà. È diverso da
var x = new object();
?
Sì, i tipi utilizzati sono diversi. Si può dire questo al momento della compilazione:
var x = new {};
// Won't compile - no implicit conversion from object to the anonymous type
x = new object();
Se stai chiedendo se new{}
è mai utile - beh, questo è un altro discorso ... Non riesco a pensare immediatamente di eventuali usi sensibili per esso .
Bene, per cominciare, l'oggetto è un tipo reale, non anonimo ... se si esegue x.GetType() nel secondo esempio, si ritorna System.Object.
Insieme al ritorno da GetType come accennato, x non sarebbe di tipo oggetto, quindi non sarebbe possibile assegnare un tipo di oggetto a tale variabile. La risposta di
var x = new { };
var y = new object();
//x = y; //not allowed
y = x; //allowed
Jon Skeet era principalmente quello che volevo, ma per amor di completezza qui ci sono alcuni più differenze, ottenuti dalla riflettore:
new {}
override tre metodi di object
:
Equals
- Come menzionato in altre risposte, new object
e new {}
hanno tipi diversi, quindi non sono uguali.GetHashCode
restituisce 0 per new {}
(ma perché si sarebbe messo in una tabella hash in ogni caso?)ToString
stampe "{}" per new {}
purtroppo non posso pensare ad un'applicazione pratica per tutto questo. Ero solo curioso.
+ up per essere più chiaro di quanto lo fossi :) – Jonas
"se nuovo {} è sempre utile" questo è un buon materiale per un'altra domanda. :) –
Sono curioso, l'oggetto anonimo creato da new {} eredita ancora da System.Object? –