Модераторы: Partizan, gambit
  

Поиск:

Ответ в темуСоздание новой темы Создание опроса
> operator==, Equals, ReferenceEquals, CompareTo ... что для чего в c#? 
:(
    Опции темы
jonie
Дата 30.7.2008, 08:49 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



вот тут задумался.. как в c#  обычно использут operator== и сопутсвующие.
как я понимаю обычно в c# operator== используется для проверки на равенство ссылок (что для С++ ника выглядит немного дико)... так что для чего используется обычно? Как принято в логическом смысле перегружать операторы, чтобы не ввести в заблуждение других программистов?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
HalkaR
Дата 30.7.2008, 10:01 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 14
Всего: 42



== - это проверка ссылок для ссылочных типов и эквивалентности для значимых (оператор и следовательно не виртуален). Теоретически может быть переопределен для проверки ссылочных типов на эквивалентность, но лучше так не делать.
Equals - это проверка эквивалентности (виртальный метод).
ReferenceEquals - проверка ссылочного равенства (не перегружается, так что можно не волноваться).
CompareTo - это сравнение для сортировки - т.е. 1,0,-1 в зависимости от значений.

Это сообщение отредактировал(а) HalkaR - 30.7.2008, 10:02
PM MAIL   Вверх
jonie
Дата 30.7.2008, 10:13 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Эксперт
****


Профиль
Группа: Завсегдатай
Сообщений: 5613
Регистрация: 21.8.2005
Где: Владимир

Репутация: 22
Всего: 118



вооот... 
Цитата

== - это проверка ссылок для ссылочных типов и эквивалентности для значимых (оператор и следовательно не виртуален). Теоретически может быть переопределен для проверки ссылочных типов на эквивалентность, но лучше так не делать.
почему лучше не делать? раве выражение a==b не наводит на мысль, что сравниваются объекты a и b ? зачем извращаться с Equals ? почему Equals  ведет себя не так как == ? 
кароче: почему так принято? если есть ReferenceEquals  ?


--------------------
Что-то не поняли? -> Напейтесь до зеленых человечков... эта сверхцивилизация Вам поможет...
PM MAIL Jabber   Вверх
Partizan
Дата 30.7.2008, 10:17 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Let's do some .NET
****


Профиль
Группа: Модератор
Сообщений: 2828
Регистрация: 19.12.2005
Где: Санкт-Петербург

Репутация: 18
Всего: 67



jonie, всё из-за специфики языка...из-за того что большинство типов являются ссылочными...поведение оператора == вполне логично



--------------------
СУВ,
       Partizan.
PM MAIL WWW ICQ Skype GTalk Jabber   Вверх
nikitao
Дата 30.7.2008, 13:04 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Кот-программист
***


Профиль
Группа: Завсегдатай
Сообщений: 1206
Регистрация: 30.8.2005
Где: Спб

Репутация: 4
Всего: 26



Все зависет от задачи. Если для твоего типа действительно осмысленно и необходимо сравнивать не ссылки , а значения , то смело переопределяй Equals и операторы == и !=. Самый хороший пример такого типа : string.

Это сообщение отредактировал(а) nikitao - 30.7.2008, 13:05


--------------------
Жизнь - печальная штука.
PM MAIL ICQ Skype GTalk   Вверх
HalkaR
Дата 30.7.2008, 14:02 (ссылка) | (нет голосов) Загрузка ... Загрузка ... Быстрая цитата Цитата


Пуфыстый назгул
****


Профиль
Группа: Экс. модератор
Сообщений: 2132
Регистрация: 8.12.2002
Где: В Москве

Репутация: 14
Всего: 42



Цитата(jonie @  30.7.2008,  10:13 Найти цитируемый пост)
раве выражение a==b не наводит на мысль, что сравниваются объекты a и b ? зачем извращаться с Equals ? почему Equals  ведет себя не так как == ? 
 Хм, трудно сказать, но в C# - это наиболее распространенное поведение, потому что == редко переопределяется, а если и переопределяется, то через Equals. Видя == я почти всегда уверен что это сравнение ссылок. 

PM MAIL   Вверх
  
Ответ в темуСоздание новой темы Создание опроса
Прежде чем создать тему, посмотрите сюда:
mr.DUDA
THandle

Используйте теги [code=csharp][/code] для подсветки кода. Используйтe чекбокс "транслит" если у Вас нет русских шрифтов.
Что делать если Вам помогли, но отблагодарить помощника плюсом в репутацию Вы не можете(не хватает сообщений)? Пишите сюда, или отправляйте репорт. Поставим :)
Так же не забывайте отмечать свой вопрос решенным, если он таковым является :)


Если Вам понравилась атмосфера форума, заходите к нам чаще! С уважением, mr.DUDA, THandle.

 
0 Пользователей читают эту тему (0 Гостей и 0 Скрытых Пользователей)
0 Пользователей:
« Предыдущая тема | Общие вопросы по .NET и C# | Следующая тема »


 




[ Время генерации скрипта: 0.0501 ]   [ Использовано запросов: 22 ]   [ GZIP включён ]


Реклама на сайте     Информационное спонсорство

 
По вопросам размещения рекламы пишите на vladimir(sobaka)vingrad.ru
Отказ от ответственности     Powered by Invision Power Board(R) 1.3 © 2003  IPS, Inc.