Вопрос про object

Язык C#
  1. 5 года назад

    Добрый день! Проходила элементарный тест по С#. Не пойму, почему выражение (object)1 == (object)1 дает false? Можете объяснить, пожалуйста!

  2. Alexandr_Erohin

    Nov 29 Администратор
    Добавлено 5 года назад Alexandr_Erohin

    А как интересно вы хотите сравнивать два объекта с помощью оператора "==" ? Для сравнения объектов конечно можно перегрузить этот оператор сравнения (описано здесь), но проще использовать встроенный метод Object.Equals.

    Т.е. следующий код даст false, потому что два объекта при их создании друг о друге ничего не знают:

    if ((object)1 == (object)1)
              Console.WriteLine("TRUE");
    else Console.WriteLine("FALSE");

    А вот видоизменённый пример, который даст true:

    if (((object)1).Equals((object)1))
              Console.WriteLine("TRUE");
    else Console.WriteLine("FALSE");
  3. 1 - структурный(значимый) тип данных , когда вы приводите ее к типу object у вас происходит упаковка(boxing) (в управляемой куче создается копия переменной, а ссылка на нее передается во внешний объект, ну или типа того), соответсвтенно (object)1 - первая ссылка, (object)1 -вторая ссылка и они указывают на абсолютно разные объекты находящиеся в памяти, когда используется оператор == для ссылочных типов происходит сравнение ссылок, а так как они разные вы получаете false. В случае же использования equals его работа начинается, как правило, со сравнения хешей, а хеши у нас оказались одинаковые...

  4. 6 месяцев(а)
    Удалено 6 месяцев(а) - obra
  5. Удалено 6 месяцев(а) - obra
  6. Удалено 6 месяцев(а) - obra
  7. Удалено 6 месяцев(а) - obra
  8. Удалено 6 месяцев(а) - obra
  9. Удалено 6 месяцев(а) - obra
  10. Удалено 6 месяцев(а) - obra
  11. Удалено 6 месяцев(а) - obra

или зарегистрируйтесь чтобы ответить