C# — метод Value Type Equals — почему компилятор использует отражение?C#

Место общения программистов C#
Ответить Пред. темаСлед. тема
Anonymous
 C# — метод Value Type Equals — почему компилятор использует отражение?

Сообщение Anonymous »

Я только что столкнулся с чем-то довольно странным для меня: когда вы используете метод 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. */
(...)
Мой вопрос: почему компилятор C# не создает простой метод для сравнения типов значений? Что-то вроде (в определении MyStruct):

Код: Выделить всё

   public override bool Equals( Object o ){
if ( this.i == o.i )
return true;
else
return false;
}
Компилятор знает, какие поля MyStruct во время компиляции, почему он ждет до времени выполнения, чтобы перечислить поля MyStruct?

Для меня это очень странно.

Спасибо :)

ДОБАВЛЕНО : Извините, я просто понимаю, что, конечно, Equals — это не ключевое слово языка, а метод времени выполнения... Компилятор совершенно не знает об этом методе. Поэтому здесь имеет смысл использовать отражение.

Подробнее здесь: https://stackoverflow.com/questions/100 ... reflection
Реклама
Ответить Пред. темаСлед. тема

Быстрый ответ

Изменение регистра текста: 
Смайлики
:) :( :oops: :roll: :wink: :muza: :clever: :sorry: :angel: :read: *x)
Ещё смайлики…
   
К этому ответу прикреплено по крайней мере одно вложение.

Если вы не хотите добавлять вложения, оставьте поля пустыми.

Максимально разрешённый размер вложения: 15 МБ.

  • Похожие темы
    Ответы
    Просмотры
    Последнее сообщение

Вернуться в «C#»