Почему анонимные типы не перегружают == и! = Операторы (но записи делают)?C#

Место общения программистов C#
Ответить
Anonymous
 Почему анонимные типы не перегружают == и! = Операторы (но записи делают)?

Сообщение Anonymous »

Методы equals и gethashcode на анонимных типах переопределены, чтобы они работали таким образом, что два экземпляра одного и того же анонимного типа считаются равными, только если все их свойства одинаковы - то есть в равенстве стоимости, а не справочника. - Вместо этого они были оставлены для проверки на справочное равенство. Я бы ожидал, что операторы будут перегружены, сродни этому во время процесса понижения: < /p>

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

public static bool operator ==(AnonymousType0 x, AnonymousType0 y) => x is not null && x.Equals(y);
public static bool operator !=(AnonymousType0 x, AnonymousType0 y) => !(x == y);
Новые типы записей в C#, с другой стороны, перегружают метод == и! Поэтому мне интересно, какие философские или другие оправдания, которые дизайнеры языка в то время решили не перегружать операторов == и! = на анонимных типах? Равенство.
[*] Иногда он синхронизируется с равными , иногда нет.
Иногда он всегда возвращает одно и то же значение независимо от того, какой тип объект был поднят, иногда нет. Оператор также), действительно кажется, что нет четкой цели для отдельно-внедренного оператора == на языке. Такое ощущение, что это просто служит путанице и приведению к ненужным ошибкам, и было бы лучше, если бы == вообще не может быть перегружена вообще, и вместо этого он всегда проверял операнд на стороне левой стороны и выполнял свой метод равных с помощью правого операнда, который я думаю, что-то, что есть какое-то код, код/код , я предполагаю, что это может быть каким-то кодрой, который можно предположить. Оператор может быть перегружен, чтобы обеспечить пользовательскую проверку равенства на основе идентификации, которая отличается как от равенства значения, так и от справочного равенства-например, на основе гид. Тем не менее, в документации Microsoft, по -видимому, нигде не указывается, что это предполагаемый вариант использования. место; Мой рассказывает об операторах == и! Скажите: < /p>

По умолчанию оператор == Тестирование на справочное равенство, определяя, указывают ли две ссылки один и тот же объект. Поэтому ссылочные типы не должны реализовать оператор ==, чтобы получить эту функциональность. Когда тип неизменен, то есть данные, которые содержатся в экземпляре, не могут быть изменены, оператор перегрузки == для сравнения значения равенства вместо эталонной равенства может быть полезным, потому что, как несомненные объекты, их можно считать такими же, как и то же самое, что у них одно и то же значение.

. Похоже, что статья была написана в год после года. /> edit < /strong>: Руководство Microsoft по проектированию для операторов равенства может сказать: < /p>

✔ Убедитесь, что Object.evals и операторы равенства имеют одинаковую семантику и аналогичные характеристики. в год после выпуска C# 3.0.

Подробнее здесь: https://stackoverflow.com/questions/796 ... records-do
Ответить

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

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

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

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

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