Перейти из форума на сайт.

НовостиФайловые архивы
ПоискАктивные темыТоп лист
ПравилаКто в on-line?
Вход Забыли пароль? Первый раз на этом сайте? Регистрация
Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Явное преобразование int в bool в С#

Модерирует : ShIvADeSt

 Версия для печати • ПодписатьсяДобавить в закладки

Открыть новую тему     Написать ответ в эту тему

Vladimirll

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
//Листинг 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();
        }
    }
}
 
 
 

Всего записей: 66 | Зарегистр. 07-07-2015 | Отправлено: 13:57 13-09-2015
StillPhelix



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
&&
- Логическое И

Цитата:
==
- возвращает ИСТИНА, если левое и правое выражения подобны.
 

Цитата:
return health == temp.health && ammo == temp.ammo && name == temp.name;  
-  возвращает ИСТИНА, если все три условия ИСТИНА.
 
А сами переменные, инициализируемые конструктором Monster неявным образом преобразовываются в тип bool только на момент их сравнения.  
 
 

Всего записей: 173 | Зарегистр. 18-08-2013 | Отправлено: 22:16 14-09-2015
Vladimirll

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StillPhelixДля  чего  в  этой   программе   метод  ToString() ?   Он же ничего не делает.  Что  он  есть  , что  его  нет.
 
 

Всего записей: 66 | Зарегистр. 07-07-2015 | Отправлено: 22:51 14-09-2015
StillPhelix



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
Этот метод задаёт формат вывода текста.
Видимо, автор этот метод планировал вызывать из другой части программы. Спросите у автора. Если это вам не нужно - удалите и не мучайтесь.

Всего записей: 173 | Зарегистр. 18-08-2013 | Отправлено: 23:04 14-09-2015
Vladimirll

Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StillPhelixДля  чего  в  этой   программе   метод   GetHashCode()?  Можно  как  бы  и  без  него .

Всего записей: 66 | Зарегистр. 07-07-2015 | Отправлено: 14:21 16-09-2015
StillPhelix



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
 return health.GetHashCode();  
- возвращает хеш-код текущего экземпляра. Это из области программирования Microsoft.DirectX.Direct3D, а также Microsoft.DirectX. Все подробности есть в MSDN. Я никогда DirectX не программировал.
 
Добавлено:

Цитата:
Можно  как  бы  и  без  него .
если он не вызывается из другой части программы.

Всего записей: 173 | Зарегистр. 18-08-2013 | Отправлено: 21:26 16-09-2015
NeoAnomaly

Full Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору
StillPhelix, ну прям продолжение разговора про .net из соседнего топика
 
Какой directx, какое неявное преобразование типов? ))
 
GetHashCode - к directx не имеет никакого отношения, метод определён в базовом типе object. Он всего лишь возвращает хэш экземпляра объекта, используется в операциях сравнения(в основном используется при вставке значений в хэш таблицы, словари и т.п.).
https://msdn.microsoft.com/ru-ru/library/system.object.gethashcode(v=vs.110).aspx

Всего записей: 418 | Зарегистр. 23-03-2010 | Отправлено: 12:27 18-09-2015 | Исправлено: NeoAnomaly, 12:50 18-09-2015
StillPhelix



Junior Member
Редактировать | Профиль | Сообщение | Цитировать | Сообщить модератору

Цитата:
Какой directx, какое неявное преобразование типов?

NeoAnomaly, Читай SDK. Там всё написано.
 

Цитата:
GetHashCode - к directx не имеет никакого отношения, метод определён в базовом типе object

 
Тип object - общий для всех классов. В пространстве имён  Microsoft.DirectX тоже есть метод GetHashCode  
 

Цитата:
Он всего лишь возвращает хэш экземпляра объекта, используется в операциях сравнения(в основном используется при вставке значений в хэш таблицы, словари и т.п.).

Проблема в том, алгоритм вычисления хеша надо писать самому. В примере, который приведен по ссылке метод GetHashCode никакого хеша не возвращает (тупо возвращеет n не проводя над ним никаких операций какой же это хэш?).  
 
Vladimirll абсолютно прав. GetHashCode из класса Monster можно абсолютно безболезненно убрать, ибо GetHashCode там ничего не делает (предварительно вычистив все ссылки на него).
 
 
 
Добавлено:

Цитата:
Цитата:
Какой directx, какое неявное преобразование типов?
 
NeoAnomaly, Читай SDK. Там всё написано.  

 
NeoAnomaly,
 
Прямая цитата из SDK:
Logical AND Operator: && Visual Studio 2010Visual Studio 2010  
 
View ColorizedCopy to ClipboardPrintexpression && expression
expression && expression
 
Remarks
--------------------------------------------------------------------------------
 
The logical AND operator ( &&) returns the boolean value true if both operands are true and returns false otherwise. The operands are implicitly converted to type bool prior to evaluation, and the result is of type bool. Logical AND has left-to-right associativity.  
 
The operands to the logical AND operator need not be of the same type, but they must be of integral or pointer type. The operands are commonly relational or equality expressions.
 
The first operand is completely evaluated and all side effects are completed before continuing evaluation of the logical AND expression.
 
The second operand is evaluated only if the first operand evaluates to true (nonzero). This evaluation eliminates needless evaluation of the second operand when the logical AND expression is false. You can use this short-circuit evaluation to prevent null-pointer dereferencing, as shown in the following example:
 
View ColorizedCopy to ClipboardPrintchar *pch = 0;
  ...
  (pch) && (*pch = 'a');
   
char *pch = 0;
...
(pch) && (*pch = 'a');
 
 
If pch is null (0), the right side of the expression is never evaluated. Therefore, the assignment through a null pointer is impossible.  
 
Operator Keyword for &&
The and operator is the text equivalent of &&. There are two ways to access the and operator in your programs: include the header file iso646.h, or compile with the /Za (Disable language extensions) compiler option.  
 
 

Всего записей: 173 | Зарегистр. 18-08-2013 | Отправлено: 18:53 18-09-2015
Открыть новую тему     Написать ответ в эту тему

Компьютерный форум Ru.Board » Компьютеры » Прикладное программирование » Явное преобразование int в bool в С#


Реклама на форуме Ru.Board.

Powered by Ikonboard "v2.1.7b" © 2000 Ikonboard.com
Modified by Ru.B0ard
© Ru.B0ard 2000-2024

BitCoin: 1NGG1chHtUvrtEqjeerQCKDMUi6S6CG4iC

Рейтинг.ru