Mi sono imbattuto in qualcosa di molto strano per me: quando si usa il metodo Equals() su un tipo di valore (e se questo metodo non è stato sovrascritto, ovviamente) si ottiene qualcosa molto molto lento - i campi vengono confrontati uno a uno usando la riflessione! Come in:C# - Metodo di tipo Valore uguale: perché il compilatore utilizza il riflesso?
public struct MyStruct{
int i;
}
(...)
MyStruct s, t;
s.i = 0;
t.i = 1;
if (s.Equals(t)) /* s.i will be compared to t.i via reflection here. */
(...)
La mia domanda: perché il compilatore C# non generano un metodo semplice per confrontare i tipi di valore? Qualcosa di simile (nella definizione di MyStruct):
public override bool Equals(Object o){
if (this.i == o.i)
return true;
else
return false;
}
Il compilatore sa quali sono i campi di MyStruct in fase di compilazione, il motivo per cui ci si aspetta fino al runtime per enumerare i campi MyStruct?
Molto strano per me.
Grazie :)
aggiunto: Siamo spiacenti, ho appena si rendono conto che, ovviamente, Equals
non è una parola chiave lingua, ma un metodo di esecuzione ... Il compilatore è completamente all'oscuro di questo metodo. Quindi fa sentire qui per usare la riflessione.
"Per utilizzare l'implementazione standard di Eguali, il tipo di valore deve essere imballato e passato come esempio del tipo riferimento System.ValueType. Il metodo Equals quindi utilizza riflessione per eseguire la confronto." - msdn.microsoft.com/en-us/library/ff647790.aspx – MrPhil