C#: Как делает статический объект. Равняется проверке на равенство?

Разговор как автор библиотеки:

я ожидаю окончательной версии, которая будет выпущена. Моя вера, как этот большей части сообщества Python, состоит в том, что 2.x продолжит быть доминирующей версией сроком на недели или месяцы. Это - много времени для выпуска хорошего, полируемого 3.x выпуск.

я буду поддерживать отдельный 2.x и 3.x ответвления. 2.x будет назад совместимо с 2,4, таким образом, я не могу использовать много необычного синтаксиса или новых возможностей в 2,6 / 3.0. Напротив, 3.x ответвление использует каждые из тех функций, которые приводят к более хорошему опыту для пользователя. Набор тестов будет изменен так, чтобы 2to3 работал на него, и я поддержу те же тесты для обоих ответвлений.

21
задан Svish 24 August 2010 в 20:39
поделиться

2 ответа

В основном он выполняет три действия:

  • Проверяет равенство ссылок (возвращает true, если да)
  • Проверяет нулевое значение ссылки (возвращает false, если какое-либо значение равно null; теперь null = = нулевой случай был обработан)
  • Сначала проверьте равенство значений с помощью . Equals (second)

Порядок не должен иметь значения , если оба значения имеют правильные реализации равенства, так как равенство должно быть реализовано так, чтобы x.Equals (y) подразумевало y.Equals (x) . Однако в офлайн-документации, которую я установил, указано, что first.Equals (second) (или objA.equals (objB), чтобы использовать реальное именование параметров). Интересно, что в онлайн-документации об этом не упоминается.

Просто чтобы сделать все это конкретным, реализация может выглядеть так:

public static bool Equals(object x, object y)
{
    if (x == y) // Reference equality only; overloaded operators are ignored
    {
        return true;
    }
    if (x == null || y == null) // Again, reference checks
    {
        return false;
    }
    return x.Equals(y); // Safe as we know x != null.
}
40
ответ дан 29 November 2019 в 20:35
поделиться

По умолчанию эквивалентность объекта определяется адресом объекта в памяти. Если оба экземпляра имеют одинаковый адрес памяти, они равны.

Однако он может быть перегружен внутри объекта, чтобы разработчики могли сравнивать два объекта, которые не в одной и той же ячейке памяти и все еще остаются считается равным. Например, если у вас есть уровень доступа к данным, где каждый объект имеет свой идентификатор записи данных из базы данных, вы можете сравнивать равенство объектов на основе идентификатора.

Вы можете перегрузить операторы для реализации этой функции. .

Однако это может быть перегружено внутри объекта, чтобы разработчики могли сравнивать два объекта, которые не в одной и той же ячейке памяти, и при этом считаться равными. Например, если у вас есть уровень доступа к данным, где каждый объект имеет свой идентификатор записи данных из базы данных, вы можете сравнивать равенство объектов на основе идентификатора.

Вы можете перегрузить операторы для реализации этой функции. .

Однако это может быть перегружено внутри объекта, чтобы разработчики могли сравнивать два объекта, которые не в одной и той же ячейке памяти, и при этом считаться равными. Например, если у вас есть уровень доступа к данным, где каждый объект имеет свой идентификатор записи данных из базы данных, вы можете сравнивать равенство объектов на основе идентификатора.

Вы можете перегрузить операторы для реализации этой функции. .

1
ответ дан 29 November 2019 в 20:35
поделиться
Другие вопросы по тегам:

Похожие вопросы: