powered by simpleCommunicator - 2.0.58     © 2025 Programmizd 02
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перегрузка оператора !=
18 сообщений из 18, страница 1 из 1
Перегрузка оператора !=
    #38108196
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я упражняюсь в написании классов, пишу класс для дроби. И столкнулся с проблемой, перегрузил операцию !=. Дальше в тексте при
проверке на null, попадаю в этот метод, но он не предназначен для null. Вопрос, для проверки на null надо отдельную перегрузку писать?
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38108374
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Предназначен. Если вы перегружаете != то и == должны перегрузить. Вообще, != это противоположность == и вся логика в основном сидит в ==/
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38108396
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
это я знаю, эти операторы перегружаются по парно. Просто до того как я их перегрузил, проверка на null работала, а после перегрузки не работает. И я не знаю что делать
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38108866
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus, код показывать.
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38109040
Фотография buser
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusэто я знаю, эти операторы перегружаются по парно. Могу ошибаться, но смысла в этом нет... Достаточно == dimasikusПросто до того как я их перегрузил, проверка на null работала, а после перегрузки не работает. И я не знаю что делать
Что-то... брекпоинт поставить :) ну и обработать null исходя из вашей логики... а вообще, лучше не знать о такой возможности, как перегрузка операторов... боюсь в реальном проекте вас оскопят за применение этого знания...
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38109137
Arm79
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusИ я не знаю что делать

Не заниматься ерундой. Перегрузка операторов вещь, конечно, интересная, но ИМХО бессмысленная.

Спецификация CLS
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38109150
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Arm79dimasikusИ я не знаю что делать

Не заниматься ерундой. Перегрузка операторов вещь, конечно, интересная, но ИМХО бессмысленная.Ага, особенно для:dimasikusЯ упражняюсь в написании классов, пишу класс для дроби .
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38109209
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Вот код, при сравнении с null, obj2 равен null и выскакивает ошибка.
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
28.
29.
30.
31.
 /// <summary>
       /// Операция равно
       /// </summary>
       /// <param name="obj1">Первая дробь</param>
       /// <param name="obj2">Вторая дробь</param>
       /// <returns>Результат сравнения, true - если первая дробь равна второй, иначе - false</returns>
       public static bool operator ==(Fraction obj1, Fraction obj2)
       {
           if ((obj1.numerator * obj2.denominator) == (obj2.numerator * obj1.denominator))
           {
               return true;
           }

           return false;
       }

       /// <summary>
       /// Операция не равно
       /// </summary>
       /// <param name="obj1">Первая дробь</param>
       /// <param name="obj2">Вторая дробь</param>
       /// <returns>Результат сравнения, true - если первая дробь не равна второй, иначе - false</returns>
       public static bool operator !=(Fraction obj1, Fraction obj2)
       {
           if ((obj1.numerator * obj2.denominator) != (obj2.numerator * obj1.denominator))
           {
               return true;
           }

           return false;
       }


Arm79 вы говорите что бессмысленно, но а если допустим надо сравнить одну дробь с другой, ведь дроби сравниваются не так как целые числа. Как тогда поступить в этом случае?
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38109229
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus, либо явно проверяйте obj1 и obj2 на null, либо вместо класса используйте структуру для реализации дроби.
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38109233
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38109975
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikus,

Код: c#
1.
2.
if ((Object)obj1 == null)...
if ((Object)obj2 == null)...



Делать так. Ошибка, новичка, если честно.
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38110127
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Абсолют, а зачем приводить к типу Object?
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38110421
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Я всегда так проверял на null. А как можно по другому? Просто я не задумывался что это не правильно, нам так препод показывал.
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38110494
Фотография skyANA
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusА как можно по другому?Так:
Код: c#
1.
2.
if (obj1 == null)...
if (obj2 == null)...
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38111097
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusЯ всегда так проверял на null. А как можно по другому? Просто я не задумывался что это не правильно, нам так препод показывал.

Код: c#
1.
== default(T) {...}



Так тоже можно. Но не проканает тут.

skyANAАбсолют, а зачем приводить к типу Object?


Потому, что перегруз "==".
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38111115
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusЯ всегда так проверял на null. А как можно по другому? Просто я не задумывался что это не правильно, нам так препод показывал.

Только не value типы. Вообще старайтесь типимизации уделять больше внимания. Я ничего плохого не вижу в перегрузе операторов сравнения, но ими нужно уметь пользоваться. И учиться прользоваться перегрузкой операторов нужно только тогда, когда вы понимаете и знаете на отметку A+ что такое обобщения, наследования и прочая ООП лабудень в контексте .net
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38111130
Фотография Абсолют
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
dimasikusнам так препод показывал.

Лучше бы он показал вам в первую очередь свой Git аккаунт. Если нету - то грошь цена таким преподавателям.

dimasikusчто это не правильно

См. выше мои два комментария. В данном случае это уместно.
...
Рейтинг: 0 / 0
Перегрузка оператора !=
    #38111430
dimasikus
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Гость
Спасибо, а что такое Git аккаунт?
...
Рейтинг: 0 / 0
18 сообщений из 18, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перегрузка оператора !=
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]