Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Блоги Сообщество Поиск Заказать работу  
 
 
Рейтинг 4.51/47: Рейтинг темы: голосов - 47, средняя оценка - 4.51
2 / 2 / 0
Регистрация: 19.12.2013
Сообщений: 216

Явное преобразование int в bool

13.09.2015, 13:46. Показов 10166. Ответов 23
Метки нет (Все метки)

Студворк — интернет-сервис помощи студентам
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
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
//Листинг 8.5. Перегрузка методов класса object
 
using System;
namespace Pavlovs185
{
    class Monster
    {
        public Monster(int health, int ammo, string name)
        {
            this.health = health;
            this.ammo = ammo;
            this.name = name;
        }
 
        public override bool Equals(object obj)
        {
            if (obj == null || GetType() != obj.GetType()) return false;
           
            Monster temp = (Monster)obj;
            return health == temp.health &&          // Что это за преобразование     
                   ammo == temp.ammo &&            //  какого рода  ?
                   name == temp.name;
        }
 
         public override int GetHashCode()
         {
            return health.GetHashCode();
         }
 
         public override string ToString()
        {
            return string.Format( "Monster {0} \t health = {1} ammo = { 2 } " ,
                   name, health, ammo );
        }
 
        string name;
        int health, ammo;
    }    
 
    class Class1
    {
        static void Main()
        {
            Monster X = new Monster(80, 80, "Вася");
            Monster Y = new Monster(80, 80, "Вася");
            Monster Z = X;            
 
            if (X == Y) Console.WriteLine(" X == Y ");
            else Console.WriteLine(" X != Y ");
 
            if (X == Z) Console.WriteLine("X == Z ");
            else     Console.WriteLine("X != Z" ) ;        
            
            if (X.Equals(Y)) Console.WriteLine("X Equals Y");
            else Console.WriteLine("X not Equals Y ");
 
            Console.WriteLine(X.GetType());
            
            Console.ReadKey();
        }
    }
}
0
cpp_developer
Эксперт
20123 / 5690 / 1417
Регистрация: 09.04.2010
Сообщений: 22,546
Блог
13.09.2015, 13:46
Ответы с готовыми решениями:

Явное преобразование своего класса в int
Всем привет! Есть такой класс: public class Address { private int _Field; private int _position; ...

Преобразование int в bool
Приветствую. Только начинаю (1-й язык). Собственно проблема: наделал ошибок, но не знаю где. Консольная программка выдающая 2...

Преобразование bool[] в Int
Всем привет. Подскажите пожалуйста, как можно реализовать? Имеется: private bool itog = new bool; Как преобразовать...

23
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
13.09.2015, 15:43
Цитата Сообщение от Владимирл Посмотреть сообщение
Что это за преобразование
Чтобы сравнить 2 объекта, имеющих несколько свойств, требуется
сравнить каждое свойство 1го объекта, с соответствующим свойством 2го.
Таким образом, 2 объекта равны, если равно их содержание.
Класс "монстр" имеет 3 свойства - хп, патроны, имя.
Значит "2 монстра равны", если хп1 == хп2, ammo1 == ammo2, name1 == name2.
Равны должны быть все свойства, значит используем оператор "И" - &&.
А оператор "==" возвращает bool - true или false.
Если свойства классов равны, то в итоге выражение получится таким: true && true && true, и вернет оно true.
Но, если, хотя бы 1 параметр не равен другому, например имя, true && true && false, благодаря И вернет false.
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
13.09.2015, 18:11
Тут нет никакого преобразования. Простое сравнение полей класса.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
13.09.2015, 21:00
Поскольку метод ToString() в реализации уже перегружен, то для упрощения задачи можно просто сравнивать строковые значения объектов, перед этим сравнив на неравнозначность ссылок.
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
13.09.2015, 21:38
Цитата Сообщение от insite2012 Посмотреть сообщение
Поскольку метод ToString() в реализации уже перегружен, то для упрощения задачи можно просто сравнивать строковые значения объектов, перед этим сравнив на неравнозначность ссылок.
Угу, а когда ToString изменят, и Equals перестанет правильно работать - обхохочешся.
0
Эксперт .NET
 Аватар для insite2012
5548 / 4311 / 1218
Регистрация: 12.10.2013
Сообщений: 12,371
Записей в блоге: 2
13.09.2015, 21:45
Цитата Сообщение от Storm23 Посмотреть сообщение
а когда ToString изменят
Так можно его изначально переопределить корректно (к примеру, через рефлексию и проход по всем полям объекта), и тогда изменение количества полей, на основе которых идет формирование строкового представления, не окажет влияния. Ну и для учебного примера и так вполне устроит, ятд)))
0
2 / 2 / 0
Регистрация: 19.12.2013
Сообщений: 216
14.09.2015, 15:09  [ТС]
Woldemar89, А как компилятор ( может не компилятор, не знаю как правильно) по какой команде определяет, что надо в данном выражении : return health == temp.health && ammo == temp.ammo && name == temp.name; подставлять на место health и temp.health , соотвественно ammo и temp.ammo и т.д. ?
0
TheGreatCornholio
 Аватар для Woldemar89
1255 / 733 / 285
Регистрация: 30.07.2015
Сообщений: 2,408
14.09.2015, 15:19
Владимирл, читай мой предыдущий пост пока не поймешь. Там все разжевано, дальше некуда.
0
2 / 2 / 0
Регистрация: 19.12.2013
Сообщений: 216
14.09.2015, 16:24  [ТС]
Woldemar89, Строка 17 программы : if (obj == null || GetType() != obj.GetType()) return false;
obj == null это понятно, а вот GetType() != obj.GetType() не пойму : obj.GetType() это определение типа Y ,а что обозначает GetType() ?
0
Эксперт .NET
6691 / 4102 / 1607
Регистрация: 09.05.2015
Сообщений: 9,574
14.09.2015, 16:34
Цитата Сообщение от Владимирл Посмотреть сообщение
а что обозначает GetType()
Метод класса Monster, унаследованный от базового типа object.
0
2 / 2 / 0
Регистрация: 19.12.2013
Сообщений: 216
14.09.2015, 17:19  [ТС]
Someone007, Уточняю GetType() в левой части выражения GetType() != obj.GetType() . Правая часть выражения определяет тип Y и не должна быть равна…… , а вот что в левой части ??? Здесь же происходит сравнение 2-х типов .
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
14.09.2015, 17:27
Владимирл, Эта строчка
C#
1
if (obj == null || GetType() != obj.GetType()) return false;
означает что если объект obj равен null или тип текущего объекта (для которого вызывается метод Equals) не равен типу obj, то вернуть из метода значение false.

Эта строка
C#
1
Monster temp = (Monster)obj;
нужна для явного преобразования переменной obj в тип Monster (после того, как мы убедились, что тип obj совпадает с нашим типом Monster).

Это
C#
1
2
3
            return health == temp.health &&          // Что это за преобразование     
                   ammo == temp.ammo &&            //  какого рода  ?
                   name == temp.name;
Означает что из метода вернется true, если поле health текущего объекта (для которого вызывается метод Equals) равен полю health объекта obj, и если ammo равен ammo объекта obj, и если поле name равно name объекта obj.
0
2 / 2 / 0
Регистрация: 19.12.2013
Сообщений: 216
14.09.2015, 18:44  [ТС]
Storm23, Правильно ли будет сказать , что GetType() в левой части выражения GetType() != obj.GetType() это
оператор , определяющий тип объекта , вызвавшего метод . А GetType() в правой части выражения это метод , определяющий тип аргумента , переданного в метод Equals ??? То есть это не два метода GetType() , а оператор и метод GetType()
0
Эксперт .NETАвтор FAQ
 Аватар для Storm23
10427 / 5157 / 1825
Регистрация: 11.01.2015
Сообщений: 6,226
Записей в блоге: 34
14.09.2015, 18:54
Цитата Сообщение от Владимирл Посмотреть сообщение
То есть это не два метода GetType() , а оператор и метод GetType()
Нет, это именно два метода. Один из них вызывается для текущего объекта, другой - для obj.
Название: 1.png
Просмотров: 266

Размер: 10.6 Кб
Вы бы книжку какую по .NET почитали бы что ли...
1
2 / 2 / 0
Регистрация: 19.12.2013
Сообщений: 216
14.09.2015, 19:33  [ТС]
Storm23, Сейчас я читаю и разбираю программы по книге Т.А. Павловская “C# программирование на языке высокого уровня “ эта программа со стр. 185 Книга хорошая для обучения, но у меня не хватает практического опыта , чтобы понять отдельные места.
Будем считать , что это 2 метода. Хотя я встречал в Интернете , что есть оператор GetType()


Для чего в этой программе метод ToString() ? Он же ничего не делает. Что он есть , что его нет.

Добавлено через 15 секунд
Storm23, Сейчас я читаю и разбираю программы по книге Т.А. Павловская “C# программирование на языке высокого уровня “ эта программа со стр. 185 Книга хорошая для обучения, но у меня не хватает практического опыта , чтобы понять отдельные места.
Будем считать , что это 2 метода. Хотя я встречал в Интернете , что есть оператор GetType()


Для чего в этой программе метод ToString() ? Он же ничего не делает. Что он есть , что его нет.
0
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
14.09.2015, 20:01
GetType() = this.GetType()
так понятнее?
0
2 / 2 / 0
Регистрация: 19.12.2013
Сообщений: 216
14.09.2015, 20:26  [ТС]
valera_21, В программе есть this.health = health; this.ammo = ammo; this.name = name; это ясно. Такое как Вы пишете : GetType() = this.GetType() не встречал. А догадками заниматься для человека не имеющего опыта по существу , я имею ввиду себя , практически нет смысла.
И если действительно есть GetType() = this.GetType() Что это значит ???
0
484 / 439 / 123
Регистрация: 05.01.2010
Сообщений: 1,848
14.09.2015, 20:40
Владимирл, емае... я имел ввиду, что левая часть равнозначна правой
0
2 / 2 / 0
Регистрация: 19.12.2013
Сообщений: 216
14.09.2015, 20:55  [ТС]
valera_21, Можете уточнить , а то слова мы понимаем каждый по своему . Скажем как выражают свои мысли математики . Спасибо !
0
2 / 2 / 0
Регистрация: 19.12.2013
Сообщений: 216
16.09.2015, 14:24  [ТС]
Woldemar89, Для чего в этой программе метод GetHashCode()? Можно как бы и без него .
0
Надоела реклама? Зарегистрируйтесь и она исчезнет полностью.
raxper
Эксперт
30234 / 6612 / 1498
Регистрация: 28.12.2010
Сообщений: 21,154
Блог
16.09.2015, 14:24
Помогаю со студенческими работами здесь

Преобразование типа int в тип bool невозможно
помогите плиз: int resultAB; resultAB=inputB-inputA; if (resultAB)>(2*inputE) { ...

Неявное преобразование типа int в bool. Как исправить?
using System; using System.Collections.Generic; using System.Linq; using System.Text; namespace ConsoleApplication1 { ...

Неявное преобразование типа int в bool невозможно. Код прилагается
Неявное преобразование типа int в bool невозможно. Помогите пожалуйста! Код: using System; namespace MyFirstProgramm { class...

Явное и не явное преобразование типов - разобраться в понятии
Это как? "явно приобразовать оъекты в объекты" а что можно не явно?

Ошибка "Неявное преобразование int в bool не возможно"
Помогите нужно проверить равняется ли переменная нулю делаю так while(true) { ...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
20
Ответ Создать тему
Новые блоги и статьи
Символьное дифференцирование
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, то после закрытия окошка. . .
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2026, CyberForum.ru