C # - Typ wartości Metoda równa - dlaczego kompilator używa refleksji?
Po prostu natknąłem się na coś bardzo dziwnego dla mnie: kiedy używasz metody Equals () na typie wartości (a jeśli ta metoda nie została zastąpiona, oczywiście) masz cośbardzo bardzo powolne pola są porównywane jeden do jednego za pomocą odbicia! Jak w :
<code>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. */ (...) </code>
Moje pytanie: dlaczego kompilator C # nie generuje prostej metody porównywania typów wartości? Coś w stylu (w definicji MyStruct):
<code> public override bool Equals( Object o ){ if ( this.i == o.i ) return true; else return false; } </code>
Kompilator wie, jakie są pola MyStruct w czasie kompilacji, dlaczego czeka do czasu, gdy środowisko wykonawcze wyliczy pola MyStruct?
Bardzo dziwne dla mnie.
Dzięki :)
DODANY : Przepraszam, po prostu zdaję sobie sprawę, że oczywiścieEquals
nie jest słowem kluczowym języka, ale metodą wykonawczą ... Kompilator jest całkowicie nieświadomy tej metody. Dlatego warto tu skorzystać z refleksji.