Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
 
Рейтинг 4.71/7: Рейтинг темы: голосов - 7, средняя оценка - 4.71
31 / 25 / 27
Регистрация: 23.02.2016
Сообщений: 343
1

Что означает эта строка "Circle c = obj as Circle;" ?

11.09.2017, 16:31. Показов 1443. Ответов 6
Метки нет (Все метки)

Ребят есть код по задаче все сделал верно вроде но.. не могу понять строку
C#
1
Circle c = obj as Circle;
написал чисто с памяти ее , может ели я правильно понял то создается объект "С" и он равен чему-то , объясните чайнику 8)
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
//Создайте класс окружность с полями координаты центра и радиус и переопределите в нем корректно методы Equals
//    и GetHashCode.Окружности равны если у них одинаковые координаты центра и радиусы.
namespace ConsoleApp2
{
    class Circle
    {
        public int Centr { get; set; }
       public int Radius { get; set; }
        public Circle(int Centr, int Radius)
        {
            this.Centr = Centr;
            this.Radius = Radius;
        }
        public Circle()
        {
 
        }
        public override bool Equals(object obj)
        {
            if (obj == null)
                return false;
            Circle c = obj as Circle;
            if (obj as Circle == null)
                return false;
            return c.Centr == this.Centr && c.Radius == this.Radius;
        }
        public bool Equals(Circle obj)
        {
            if (obj == null)
                return false;
            return obj.Centr == this.Centr && obj.Radius == this.Radius;
        }
        public override int GetHashCode()
        {
            int UniCode;
            if (Radius == 32)
                UniCode = 1;
            else
                UniCode = 2;
            return (int) Centr + UniCode;
        }
    }
 
    class Program
    {
        static void Main(string[] args)
        {
            Circle c1 = new Circle(12,32);
            Circle c2 = new Circle(21, 2);
            Circle c3 = new Circle(12, 32);
            Circle c4 = c1;
            Console.WriteLine(c1.Equals(c2)); // False;
            Console.WriteLine(c1.Equals(c4)); // True;
            Console.WriteLine(c1.Equals(c3)); // True;
            Console.WriteLine(c1 == c2); // False;
            Console.WriteLine(c4 == c1); // True;
            Console.WriteLine(c1.GetHashCode());
            Console.WriteLine(c1.GetHashCode());
            Console.WriteLine(c2.GetHashCode());
            Console.ReadLine();
        }
    }
}
__________________
Помощь в написании контрольных, курсовых и дипломных работ здесь
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
11.09.2017, 16:31
Ответы с готовыми решениями:

Что означает строка кода "Protected ConsoleColor color"
using System; namespace Lessons_3 { class Program { static void Main() ...

Что означает строка "powmod(G, X, P);"?
подскажите новичку powmod(G, X, P); что означает Добавлено через 6 минут g в степени x...

что означает эта строка:
что означает эта строка: Console.WriteLine("a.x {0}, b.x {1}", a.x, b.x);? // Копирование...

Подскажите пожалуйста что означает эта строка X x2;?
Подскажите пожалуйста что означает эта строка X x2;? вот текст программы: // Ссылка на базовый...

6
3130 / 2223 / 1098
Регистрация: 14.08.2016
Сообщений: 7,601
11.09.2017, 16:35 2
Equals по умолчанию принимает object, прародителя всего и вся, но для сравнения двух окружностей, нужно сравнивать именно окружности( не запакованные в object), и вот именно тут и происходит распаковка, создается объект и ему присваивается значение object приведенное к circle
0
Администратор
Эксперт .NET
13963 / 11326 / 4590
Регистрация: 17.03.2014
Сообщений: 22,888
Записей в блоге: 1
11.09.2017, 16:52 3
Kotyara0live, оператор as выполняет приведение значения к указанному типу. Если это удается, то он возаращает значение указанного типа, иначе он возращает null. Это удобно использовать в ситуации когда есть вероятность что объект имеет неверный тип, но мы не хотим чтобы генерировалось исключение как это делает оператор приведения типа (T)expr.

Метод Equals(object) можно упростить кстати:
C#
1
2
3
4
5
6
public override bool Equals(object obj)
{
    Circle c = obj as Circle;
    if (с == null) return false;
    return c.Centr == this.Centr && c.Radius == this.Radius;
}
Цитата Сообщение от Diamante Посмотреть сообщение
( не запакованные в object), и вот именно тут и происходит распаковка
Я бы не стал употреблять здесь термины "упаковка", "распаковка" т.к. в .NET под этим понимается преобразование из/в value-type значения в reference-type значение.
1
3130 / 2223 / 1098
Регистрация: 14.08.2016
Сообщений: 7,601
11.09.2017, 16:54 4
спасибо, учту
0
Эксперт .NET
5553 / 3605 / 1493
Регистрация: 09.05.2015
Сообщений: 8,660
11.09.2017, 17:00 5
Цитата Сообщение от OwenGlendower Посмотреть сообщение
Метод Equals(object) можно упростить кстати:
Если уж упрощать, то так:
C#
1
2
3
4
5
6
public override bool Equals(object obj)
{
    if (obj is Circle c)
        return c.Centr == this.Centr && c.Radius == this.Radius;
    return false;
}
1
Администратор
Эксперт .NET
13963 / 11326 / 4590
Регистрация: 17.03.2014
Сообщений: 22,888
Записей в блоге: 1
11.09.2017, 17:07 6
Someone007, можно и так, только стоит уточнить что это конструкция из C# 7 который еще не столь широко распространен.
0
Эксперт .NET
15555 / 11804 / 3097
Регистрация: 17.09.2011
Сообщений: 19,715
11.09.2017, 17:16 7
Лучший ответ Сообщение было отмечено edward_freedom как решение

Решение

Цитата Сообщение от Someone007 Посмотреть сообщение
Если уж упрощать, то так
Можно пойти дальше!!!

C#
1
public override bool Equals(object obj) => Equals(obj as Circle);
Благо, перегрузочка имеется
1
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
11.09.2017, 17:16

создал "circle.h" файл. При компиляции Cpp файла выдаёт unable to open include file 'circle.h'
Помогите разобраться в чём проблема? Был создан circle.h, а при компиляции cpp файла ругается....

Проблема с перегрузкой операторов "+" и "+=" для классов Point и Circle
Есть класс Point (элементы данных x,y) и класс Circle (элементы данных р(типа Point),r). Их...

Ошибки компиляции "textBox2_TextChanged: не является членом 'Circle::Form1'"
Создаю программу по этому уроку:http://olocoder.ru/VS15.html Код: #pragma once namespace...

Что означает строка $("#tabs li:first").addClass("current");?
В оглавлении и так всё сказано. Буду благодарен за помощь, желательно побыстрее. Добавлено через...


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

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

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2022, CyberForum.ru