Где определяются операторы (в C #)? - PullRequest
1 голос
/ 24 сентября 2010

Просто интересно, где на самом деле определены правила для операторов в C #.

например. где я могу увидеть код, который говорит, что == проверяет ссылки двух объектов?

Я вижу перегрузки оператора, например, класс String, но теперь мне интересно увидеть «базовый» случай. Это просто то, что компилятор явно знает, что делать, и поэтому нет кода, который мы могли бы просматривать с помощью таких инструментов, как Reflector.

Ответы [ 2 ]

9 голосов
/ 24 сентября 2010

Вы не можете видеть это в коде (кроме возможно в SSCLI , я не проверял).

Вам нужно взглянуть на спецификацию языка C # . Например:

7.10.6 Операторы равенства ссылочного типа

Предопределенное равенство типов ссылок Операторы:

bool operator ==(object x, object y);
bool operator !=(object x, object y);

Операторы возвращают результат сравнивая две ссылки для равенство или неравенство.

Поскольку предопределенный тип ссылки операторы равенства принимают операнды тип object, они применяются ко всем типам которые не считают применимыми оператор == и оператор != члены. И наоборот, любой применимый определяемые пользователем операторы равенства эффективно скрыть предопределенные операторы равенства ссылочного типа.

6 голосов
/ 24 сентября 2010

Оператор == компилируется до вызова инструкции ceq IL .

...