Гость
Целевая тема:
Создать новую тему:
Автор:
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Перегрузка оператора != / 18 сообщений из 18, страница 1 из 1
13.01.2013, 13:23
    #38108196
dimasikus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка оператора !=
Я упражняюсь в написании классов, пишу класс для дроби. И столкнулся с проблемой, перегрузил операцию !=. Дальше в тексте при
проверке на null, попадаю в этот метод, но он не предназначен для null. Вопрос, для проверки на null надо отдельную перегрузку писать?
...
Рейтинг: 0 / 0
13.01.2013, 17:31
    #38108374
Абсолют
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка оператора !=
Предназначен. Если вы перегружаете != то и == должны перегрузить. Вообще, != это противоположность == и вся логика в основном сидит в ==/
...
Рейтинг: 0 / 0
13.01.2013, 18:14
    #38108396
dimasikus
Гость
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка оператора !=
это я знаю, эти операторы перегружаются по парно. Просто до того как я их перегрузил, проверка на null работала, а после перегрузки не работает. И я не знаю что делать
...
Рейтинг: 0 / 0
14.01.2013, 10:57
    #38108866
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка оператора !=
dimasikus, код показывать.
...
Рейтинг: 0 / 0
14.01.2013, 12:41
    #38109040
buser
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка оператора !=
dimasikusэто я знаю, эти операторы перегружаются по парно. Могу ошибаться, но смысла в этом нет... Достаточно == dimasikusПросто до того как я их перегрузил, проверка на null работала, а после перегрузки не работает. И я не знаю что делать
Что-то... брекпоинт поставить :) ну и обработать null исходя из вашей логики... а вообще, лучше не знать о такой возможности, как перегрузка операторов... боюсь в реальном проекте вас оскопят за применение этого знания...
...
Рейтинг: 0 / 0
14.01.2013, 13:30
    #38109137
Arm79
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка оператора !=
dimasikusИ я не знаю что делать

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

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

Не заниматься ерундой. Перегрузка операторов вещь, конечно, интересная, но ИМХО бессмысленная.Ага, особенно для:dimasikusЯ упражняюсь в написании классов, пишу класс для дроби .
...
Рейтинг: 0 / 0
14.01.2013, 14:15
    #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
14.01.2013, 14:23
    #38109229
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка оператора !=
dimasikus, либо явно проверяйте obj1 и obj2 на null, либо вместо класса используйте структуру для реализации дроби.
...
Рейтинг: 0 / 0
14.01.2013, 14:23
    #38109233
skyANA
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка оператора !=
...
Рейтинг: 0 / 0
14.01.2013, 20:48
    #38109975
Абсолют
Участник
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Перегрузка оператора !=
dimasikus,

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



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

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



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

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


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

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

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

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

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


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