Я просто наткнулся на что-то довольно странное: когда вы используете метод Equals() для типа значения (и если этот метод не был переоценен, конечно), вы получаете что-то очень очень медленное - поля сравниваются к одному, используя отражение! Как в:
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. */
(...)
Мой вопрос: почему компилятор С# не генерирует простой метод сравнения типов значений? Что-то вроде (в определении MyStruct):
public override bool Equals( Object o ){
if ( this.i == o.i )
return true;
else
return false;
}
Компилятор знает, каковы поля MyStruct во время компиляции, почему он ожидает, пока среда выполнения перечислит поля MyStruct?
Очень странно для меня.
Спасибо:)
ADDED: Извините, я просто понимаю, что, конечно, Equals
не является ключевым словом языка, а средством выполнения... Компилятор полностью не знает об этом методе. Таким образом, здесь возникает смысл использовать отражение.