|
2 / 2 / 1
Регистрация: 22.09.2014
Сообщений: 132
|
|||||||||||||||||||||
Метод Equals для значимых типов30.12.2015, 21:36. Показов 2649. Ответов 10
Опять Рихтер, наверное многим на форуме это непонятно, но спустя год КОДЕРСТВА, я понял что пора становится инженером, то есть программистом (вернее это показали результаты собеседования на мое первое место работы).
и теперь приходится перечитывать книги с глубоким пониманием и разбором не только C# кода, но и IL-кода. ВОПРОС по методу Equals. Рихтер пишет о том, что для значимых типов перегружен этот метод Equals который не сравнивает объекты. а сравнивает типы (если я правильно понял) Добавив к коду Рихтера класс
Поясните, что не так понял.
0
|
|||||||||||||||||||||
| 30.12.2015, 21:36 | |
|
Ответы с готовыми решениями:
10
Переменные значимых типов Использование переменных значимых типов создание значимых типов в цикле |
|
Администратор
|
||||||
| 30.12.2015, 21:58 | ||||||
|
Baeron, для значимых типов можно не перегружать Equals т.к. для них автоматически делается сравнение значений. То есть делается побайтовое сравнение значений. При этом сравнение значений двух разных типов даст в любом случае ложь, что в общем-то логично. У тебя v1 имеет тип SomeVal, а v2 SomeVal2. Разумеется они не равны друг другу. Если обе переменные будут иметь одинаковый тип и одно значение, то они будут равны друг другу. Например так:
1
|
||||||
|
2 / 2 / 1
Регистрация: 22.09.2014
Сообщений: 132
|
|||||||
| 30.12.2015, 22:48 [ТС] | |||||||
|
Значимые типы являются производными от System.ValueType. Этот тип имеет те же методы, что и System.Object. Однако System.ValueType переопределяет метод Equals, который возвращает true, если значения полей в обоих объектах совпадают. Из-за проблем с производительностью в реализации по умол- чанию, определяя собственные значимые типы значений, надо переопределить и написать свою реализацию методов Equals и GetHashCode. то есть он сравнивает значения полей а не их типы.
0
|
|||||||
|
Администратор
|
||
| 30.12.2015, 23:03 | ||
|
Baeron, в моем ответе была ошибка. Там сравнивались значения разных типов и что было сказано что они будут равны. Это неправильно. Я имел в виду одинаковые типы. Пример уже исправлен на правильный.
0
|
||
|
17823 / 12973 / 3382
Регистрация: 17.09.2011
Сообщений: 21,261
|
||
| 30.12.2015, 23:16 | ||
|
а) запаковка/распаковка б) рефлексия
1
|
||
|
2 / 2 / 1
Регистрация: 22.09.2014
Сообщений: 132
|
|||||||||||||||||
| 30.12.2015, 23:30 [ТС] | |||||||||||||||||
|
Не понятно зачем Джефри сделал акцент на этом переопределении и что хотел сказать. Что мы сравниваем? Типы полей которые содержит или значения полей? В чем суть этого переопределения? странно и то что вот такой код
P.S. конечно Equals удобен для сравнения именно значений, но если говорить о типах, неужели это не востребовано?
0
|
|||||||||||||||||
|
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
|
|
| 30.12.2015, 23:47 | |
|
Для reference типов реализация Equals по умолчанию сравнивает ссылки, поэтому и false.
0
|
|
|
Администратор
|
|||||
| 30.12.2015, 23:52 | |||||
|
0
|
|||||
|
|
||||||
| 30.12.2015, 23:53 | ||||||
|
Baeron, я не совсем понимаю, в чем же вы запутались... Все же просто и логично, разве нет?
1
|
||||||
|
2 / 2 / 1
Регистрация: 22.09.2014
Сообщений: 132
|
||
| 31.12.2015, 00:31 [ТС] | ||
|
P.S. ответ перечитаю отром на свежую голову. спасибо за помощь ;-)
0
|
||
|
|
||
| 31.12.2015, 00:37 | ||
Сообщение было отмечено Baeron как решение
РешениеВо втором случае у нас тип значения (поскольку это struct), а он наследует от System.ValueType, в котором уже переопределен Equals (вместо нас), и тут уже идет сравнение значений, а не ссылок. Все же вроде ясно и понятно...
1
|
||
| 31.12.2015, 00:37 | |
|
Помогаю со студенческими работами здесь
11
Динамическое приведение значимых типов данных из строки Метод Equals Реализовать метод equals() для класса Как определить метод equals для своих обетов? Искать еще темы с ответами Или воспользуйтесь поиском по форуму: |
|
Новые блоги и статьи
|
|||
|
Символьное дифференцирование
igorrr37 13.02.2026
/ *
Программа принимает математическое выражение в виде строки и выдаёт его производную в виде строки и вычисляет
значение производной при заданном х
Логарифм записывается как: (x-2)log(x^2+2) -. . .
|
Камера Toupcam IUA500KMA
Eddy_Em 12.02.2026
Т. к. у всяких "хикроботов" слишком уж мелкий пиксель, для подсмотра в ESPriF они вообще плохо годятся: уже 14 величину можно рассмотреть еле-еле лишь на экспозициях под 3 секунды (а то и больше),. . .
|
И ясному Солнцу
zbw 12.02.2026
И ясному Солнцу,
и светлой Луне.
В мире
покоя нет
и люди
не могут жить в тишине.
А жить им немного лет.
|
«Знание-Сила»
zbw 12.02.2026
«Знание-Сила»
«Время-Деньги»
«Деньги -Пуля»
|
|
SDL3 для Web (WebAssembly): Подключение Box2D v3, физика и отрисовка коллайдеров
8Observer8 12.02.2026
Содержание блога
Box2D - это библиотека для 2D физики для анимаций и игр. С её помощью можно определять были ли коллизии между конкретными объектами и вызывать обработчики событий столкновения. . . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL_LoadPNG (без SDL3_image)
8Observer8 11.02.2026
Содержание блога
Библиотека SDL3 содержит встроенные инструменты для базовой работы с изображениями - без использования библиотеки SDL3_image. Пошагово создадим проект для загрузки изображения. . .
|
SDL3 для Web (WebAssembly): Загрузка PNG с прозрачным фоном с помощью SDL3_image
8Observer8 10.02.2026
Содержание блога
Библиотека SDL3_image содержит инструменты для расширенной работы с изображениями. Пошагово создадим проект для загрузки изображения формата PNG с альфа-каналом (с прозрачным. . .
|
Установка Qt-версии Lazarus IDE в Debian Trixie Xfce
volvo 10.02.2026
В общем, достали меня глюки IDE Лазаруса, собранной с использованием набора виджетов Gtk2 (конкретно: если набирать текст в редакторе и вызвать подсказку через Ctrl+Space, то после закрытия окошка. . .
|