Ru-Board.club
← Вернуться в раздел «Прикладное программирование»

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

Автор: Vladimirll
Дата сообщения: 13.09.2015 13:57
//Листинг 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();
}
}
}



Автор: StillPhelix
Дата сообщения: 14.09.2015 22:16

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

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


Цитата:
return health == temp.health && ammo == temp.ammo && name == temp.name;
- возвращает ИСТИНА, если все три условия ИСТИНА.

А сами переменные, инициализируемые конструктором Monster неявным образом преобразовываются в тип bool только на момент их сравнения.


Автор: Vladimirll
Дата сообщения: 14.09.2015 22:51
StillPhelixДля чего в этой программе метод ToString() ? Он же ничего не делает. Что он есть , что его нет.


Автор: StillPhelix
Дата сообщения: 14.09.2015 23:04
Этот метод задаёт формат вывода текста.
Видимо, автор этот метод планировал вызывать из другой части программы. Спросите у автора. Если это вам не нужно - удалите и не мучайтесь.
Автор: Vladimirll
Дата сообщения: 16.09.2015 14:21
StillPhelixДля чего в этой программе метод GetHashCode()? Можно как бы и без него .
Автор: StillPhelix
Дата сообщения: 16.09.2015 21:26

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

Добавлено:

Цитата:
Можно как бы и без него .
если он не вызывается из другой части программы.
Автор: NeoAnomaly
Дата сообщения: 18.09.2015 12:27
StillPhelix, ну прям продолжение разговора про .net из соседнего топика

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

GetHashCode - к directx не имеет никакого отношения, метод определён в базовом типе object. Он всего лишь возвращает хэш экземпляра объекта, используется в операциях сравнения(в основном используется при вставке значений в хэш таблицы, словари и т.п.).
https://msdn.microsoft.com/ru-ru/library/system.object.gethashcode(v=vs.110).aspx
Автор: StillPhelix
Дата сообщения: 18.09.2015 18:53

Цитата:
Какой 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.


Страницы: 1

Предыдущая тема: VBS-скрипт для проверки активности процесса


Форум Ru-Board.club — поднят 15-09-2016 числа. Цель - сохранить наследие старого Ru-Board, истории становления российского интернета. Сделано для людей.