Форум программистов, компьютерный форум, киберфорум
C# для начинающих
Войти
Регистрация
Восстановить пароль
Карта форума Темы раздела Блоги Сообщество Поиск Заказать работу  
 
Рейтинг 4.91/11: Рейтинг темы: голосов - 11, средняя оценка - 4.91
34 / 28 / 27
Регистрация: 23.02.2016
Сообщений: 367
1

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

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

Author24 — интернет-сервис помощи студентам
Ребят есть код по задаче все сделал верно вроде но.. не могу понять строку
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
Ответы с готовыми решениями:

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

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

ostream &operator<< (ostream &output, const Array &obj) - что означает эта строка?
void Array::getArray() // вывод массива { for (int ix = 0; ix &lt; size; ix++) cout &lt;&lt;...

Что означает эта строка ?
Добрый день, столкнулся с java кодом, нужно его перевести на c# , но не до конца понимаю значение...

6
3560 / 2501 / 1174
Регистрация: 14.08.2016
Сообщений: 8,206
11.09.2017, 16:35 2
Equals по умолчанию принимает object, прародителя всего и вся, но для сравнения двух окружностей, нужно сравнивать именно окружности( не запакованные в object), и вот именно тут и происходит распаковка, создается объект и ему присваивается значение object приведенное к circle
0
Администратор
Эксперт .NET
17023 / 13375 / 5218
Регистрация: 17.03.2014
Сообщений: 27,353
Записей в блоге: 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
3560 / 2501 / 1174
Регистрация: 14.08.2016
Сообщений: 8,206
11.09.2017, 16:54 4
спасибо, учту
0
Эксперт .NET
6452 / 4053 / 1599
Регистрация: 09.05.2015
Сообщений: 9,487
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
17023 / 13375 / 5218
Регистрация: 17.03.2014
Сообщений: 27,353
Записей в блоге: 1
11.09.2017, 17:07 6
Someone007, можно и так, только стоит уточнить что это конструкция из C# 7 который еще не столь широко распространен.
0
Эксперт .NET
17688 / 12873 / 3366
Регистрация: 17.09.2011
Сообщений: 21,138
11.09.2017, 17:16 7
Лучший ответ Сообщение было отмечено edward_freedom как решение

Решение

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

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

Что означает эта строка в программе : until not(n in ['1'.'4']);
Program funktion5; uses crt; Var x,y,z:real; n:char; Begin clrscr; repeat clrscr;...

Что означает эта строка в коде?
Доброго времени суток, уважаемые форумчане! Встретил в чужом коде следующую строчку: ...

Что означает эта строка кода?
msgid = '&lt;%s.%s.%s%s@%s&gt;' % (utcdate, pid, randint, idstring, domain)в...

Что означает эта строка: return '\0'?
return '\0';

что означает эта строка в начале процедуры:
что означает эта строка в начале процедуры: if not enable then exit;

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

Что эта строка означает в .bat файле
C:\masm32\bin\link.exe &gt; C:\masm32\bin\text.txt


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

Или воспользуйтесь поиском по форуму:
7
Ответ Создать тему
КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru