Essi non sono del tutto equivalente - almeno non nel caso generale. Il codice utilizzando un inizializzatore oggetto è più vicino a questo:
Position tmp = new Position();
tmp.x = 3;
tmp.y = 4;
Position position1 = tmp;
In altre parole, l'assegnazione alla variabile avviene solo dopo sono state impostate le proprietà. Ora, nel caso in cui dichiari una nuova variabile locale, ciò non ha alcuna importanza e il compilatore potrebbe ottimizzarlo sul tuo primo modulo. Ma logicamente, importa. Considerate:
Position p1 = new Position { x = 10, y = 20 };
p1 = new Position { x = p1.y, y = p1.x };
Se che ha fatto il compito di p1
prima, che ci si finisce con 0 per entrambi p1.x
e p1.y
. Mentre questo è in realtà equivale a:
Position tmp = new Position();
tmp.x = 10;
tmp.y = 20;
Position p1 = tmp;
tmp = new Position();
tmp.x = p1.y; // 20
tmp.y = p1.x; // 10
p1 = tmp;
EDIT: Ho appena realizzato che si sta utilizzando una struttura piuttosto che una classe.Ciò potrebbe rendere alcune sottili differenze ... ma quasi certamente non dovresti usare una struttura mutevole per iniziare :)
fonte
2010-10-27 15:13:35
Gran parte della verità. Inserita la mia risposta ... ha visto la sua risposta, l'ha modificata per indicare la sua risposta. –
Jon Skeet sembra rispondere a tutte le domande su questo sito :) Non vedo l'ora di leggere il suo nuovo libro (se mai verrà pubblicato) – Bryan