Właśnie natknąłem się na coś bardzo dziwnego dla mnie: kiedy używasz metody Equals() na typie wartości (i jeśli ta metoda nie została przesłonięta, oczywiście) dostajesz coś bardzo powolnegojeden do jednego za pomocą refleksji! Tak jak w:C# - Metoda Value Type Equals - dlaczego kompilator używa odbicia?
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. */
(...)
Moje pytanie: dlaczego kompilator C# nie generuje prostej metody porównywania typów wartości? Coś jak (w definicji MyStruct za):
public override bool Equals(Object o){
if (this.i == o.i)
return true;
else
return false;
}
Kompilator wie, jakie są kierunki MyStruct w czasie kompilacji, dlaczego to czekać aż do czasu wykonywania wyliczyć pola MyStruct?
Bardzo dziwne dla mnie.
Dzięki :)
DODANE: Niestety, ja po prostu sobie sprawę, że, oczywiście, nie jest Equals
Hasło język ale metoda Runtime ... Kompilator jest całkowicie nieświadomy tego sposobu. Czyni sens, aby użyć refleksji.
„Aby użyć standardowego wdrażania równych, twój typ wartości muszą być zapakowane i podał jako przykład typu odniesienia System.ValueType. Równości metodę wykorzystuje następnie refleksji wykonać porównanie." - msdn.microsoft.com/en-us/library/ff647790.aspx – MrPhil