Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.50/4: Рейтинг темы: голосов - 4, средняя оценка - 4.50
6 / 6 / 0
Регистрация: 23.10.2015
Сообщений: 141
1

Метод GetType() внутри Equals(object)

31.01.2016, 12:37. Показов 838. Ответов 2
Метки нет (Все метки)

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
63
64
65
66
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;
            var F = 1003;
 
            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.WriteLine(F.GetHashCode());
 
 
            Console.ReadKey();
        }
    }
}

Подскажите пожалуйста !
Метод Equals в строке 15 для левой части выражения GetType() != obj.GetType() вызывается потому , что происходит действие “ != “ или по причине того , что блок программного кода :

C#
1
2
3
4
5
6
7
8
9
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 bool Equals(object obj) ?

0
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
31.01.2016, 12:37
Ответы с готовыми решениями:

GetType() и GetHashCode() у object
Здравствуйте. После долгих поисков в google ответы не были найдены. Можете пожалуйста объяснить как...

Что такое метод equals() и что такое класс Object
Ответи на два вопроса очень надо 1) Что такое метод equals(). Чем он отличается от операции ==....

Как привести тип Object к тому который даёт GetType() по этому объекту
Всем привет, помогите разобраться. Есть функция которая должна возвращать ссылку на экземпляр...

Можно ли обмануть метод GetType?
Здравствуйте, помогите кто знает разобраться. Читаю книжку джеффри рихтер CLR via C# стр.124....

__________________

Записывайтесь на профессиональные курсы С#-разработчиков‌
2
Эксперт .NET
14869 / 11256 / 2950
Регистрация: 17.09.2011
Сообщений: 18,846
31.01.2016, 13:20 2
Цитата Сообщение от Борис_20 Посмотреть сообщение
Метод Equals в строке 15 для левой части выражения GetType() != obj.GetType() вызывается потому , что происходит действие “ != “ или по причине того , что блок программного кода имеет название public override bool Equals(object obj) ?
Ни то, ни другое.
Метод Equals вызывается по тому, что вы его вызываете где-то между 56-й и 57-й строками кода.
0
Администратор
Эксперт .NET
13156 / 10715 / 4422
Регистрация: 17.03.2014
Сообщений: 21,588
Записей в блоге: 1
31.01.2016, 13:28 3
Борис_20, ни то ни другое. Метод Equals принимает object. Значит ему можно передать объект любого типа. Сравнивать есть смысл только объекты одинакового типа - монстра с монстром. Метод GetType() используется чтобы проверить что мы сравниваем объекты одного типа. Если нет, то результат всегда "ложь".
0
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
31.01.2016, 13:28

Заказываю контрольные, курсовые, дипломные работы и диссертации здесь.

Каким образом через метод GetType, вызывается свойство Name
При изучении перечислений наткнулся на непонятную для меня штуку. Есть некая переменная "е" типа...

Перегрузка == используя метод equals
Можно ли использовать метод Equals для сравнения двух списков list? Перегрузка == всегда возвращает...

Метод Equals для значимых типов
Опять Рихтер, наверное многим на форуме это непонятно, но спустя год КОДЕРСТВА, я понял что пора...

Почему вызывается переопределённый метод Object.equals, хотя должен вызываться ПЕРЕГРУЖЕННЫЙ?
Суть: необходимо создать авторский класс, перегрузить в нём метод equals, создать объект этого...


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

Или воспользуйтесь поиском по форуму:
3
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin® Version 3.8.9
Copyright ©2000 - 2021, vBulletin Solutions, Inc.