2009-06-22 4 views

risposta

10

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 .

+0

+ up per essere più chiaro di quanto lo fossi :) – Jonas

+0

"se nuovo {} è sempre utile" questo è un buon materiale per un'altra domanda. :) –

+0

Sono curioso, l'oggetto anonimo creato da new {} eredita ancora da System.Object? –

8

Bene, per cominciare, l'oggetto è un tipo reale, non anonimo ... se si esegue x.GetType() nel secondo esempio, si ritorna System.Object.

0

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 
0

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:

  1. Equals - Come menzionato in altre risposte, new object e new {} hanno tipi diversi, quindi non sono uguali.
  2. GetHashCode restituisce 0 per new {} (ma perché si sarebbe messo in una tabella hash in ogni caso?)
  3. ToString stampe "{}" per new {}

purtroppo non posso pensare ad un'applicazione pratica per tutto questo. Ero solo curioso.