Учебное пособие Казань 017 ббк 32. 973-018. Х15



Pdf көрінісі
бет50/66
Дата05.08.2022
өлшемі1.97 Mb.
#278158
түріУчебное пособие
1   ...   46   47   48   49   50   51   52   53   ...   66
Байланысты:
Programmirovanie-v-S
Математика 6 сынып 3, !ОШ доп СО Геометрия 7кл каз, Дістемелік кешен (2)
2.2.7. Класс System.Object 
Все классы C#, в том числе и пользовательские, являются потомками 
класса System.Object. Это происходит неявным образом даже, если 


97 
никакой класс не указан в качестве родительского класса. Хотя это можно 
указать и явно, например, 
class Vector: System.Object
Хотя результат от этого не изменится. 
Из того, что любой класс является потомком класса System.Object 
следует, что можно экземпляр любого класса записать в переменную типа 
System.Object и для объектов любого класса доступны методы класса 
System.Object.
Первый факт означает, что правомерным является, например, 
оператор 
Object a = new Vector(1, 3); 
Приведем методы класса System.Object:
• Equals() - виртуальный метод, возвращающий True, если два 
объекта расположены в одном месте памяти (второй объект 
передается в качестве параметра).
• GetHashCode() - виртуальный метод, возвращает некоторое целое 
число (хэш-код), однозначно идентифицирующее экземпляр 
класса.
• GetType() - возвращает объект типа Type, описывающий 
соответствующий тип.
• ToString() - виртуальный метод, по умолчанию возвращает строку, 
представляющую полное имя типа объекта.
При выполнении кода 
Object ob1, ob2, ob3; 
ob1 = new System.Object(); 
ob2 = ob1;
Console.WriteLine(ob1.Equals(ob2)); 
ob3 = new System.Object();
Console.WriteLine(ob1.Equals(ob3)); 
Console.WriteLine(ob1.GetHashCode()); 
Console.WriteLine(ob2.GetHashCode()); 
Console.WriteLine(ob3.GetHashCode()); 
Console.WriteLine(ob1.GetType()); 
Console.WriteLine(ob1.ToString()); 


98 
получим 
True 
False 
49147025 
49147025 
1762126 
System.Object 
System.Object 
Тот факт, что для переменных ob1 и ob2 получились одинаковые 
хэш-коды, означает, что эти переменные указывают на один экземпляр. В 
то время, как ob3 указывает на другой экземпляр. Именно об этом говорят 
первые две строки. 
Три метода из четырех указанных являются виртуальными. Поэтому 
они, как правило, в дочерних классах переопределяются. Рассмотрим 
экземпляры класса System.String. Выполним код 
Object ob1, ob2, ob3; 
ob1 =
"Hello"; 
ob2 = ob1;
Console.WriteLine(ob1.Equals(ob2)); 
ob3 = "Hello";
Console.WriteLine(ob1.Equals(ob3)); 
Console.WriteLine(ob1.GetHashCode()); 
Console.WriteLine(ob2.GetHashCode()); 
Console.WriteLine(ob3.GetHashCode()); 
Console.WriteLine(ob1.GetType()); 
Console.WriteLine(ob1.ToString()); 
Результат примет вид 
True 
True 
-694847 
-694847 
-694847 
System.String 
Hello 
Как видим, все три переменные указывают на один объект, и метод
ToString() выводит саму строку, а не имя типа объекта. 


99 
Рассмотрим арифметический тип. При выполнении кода 
Object ob1, ob2, ob3; 
ob1 =
3; 
ob2 = ob1;
Console.WriteLine(ob1.Equals(ob2)); 
ob3 = 3;
Console.WriteLine(ob1.Equals(ob3)); 
Console.WriteLine(ob1.GetHashCode()); 
Console.WriteLine(ob2.GetHashCode()); 
Console.WriteLine(ob3.GetHashCode()); 
Console.WriteLine(ob1.GetType()); 
Console.WriteLine(ob1.ToString()); 
получим 
True 
True 



System.Int32 

В этом случае хэш-код совпадает со значение переменной и метод 
ToString() также выводит ее значение. 
Во всех этих примерах мы использовали встроенные классы. Теперь 
рассмотрим пример с классом Vector, введенным ранее. Выполним код 
Object ob1, ob2, ob3; 
ob1 = new Vector(4, 3); 
ob2 = ob1;
Console.WriteLine(ob1.Equals(ob2)); 
ob3 = new Vector(4, 3);
Console.WriteLine(ob1.Equals(ob3)); 
Console.WriteLine(ob1.GetHashCode()); 
Console.WriteLine(ob2.GetHashCode()); 
Console.WriteLine(ob3.GetHashCode()); 
Console.WriteLine(ob1.GetType()); 
Console.WriteLine(ob1.ToString()); 
Получим 


100 
True 
False 
39086322 
39086322 
36181606 
Project.Vector 
Project.Vector 
Заметим, хотя у всех векторов координаты одинаковые, объект ob3 
отличается от объектов ob1 и ob2, а метод ToString() опять выводит 
имя типа объекта. 
Переопределим методы следующим образом. Пусть метод Equals() 
выводит True, если векторы имеют равные координаты, а метод 
ToString() выводит сам вектор. В описание класса Vector добавим 
методы 
public override bool Equals(object ob) 

Vector z = (Vector)ob; 
return x == z.X && y == z.Y;

public override string ToString() 

return "("+x+","+y+")"; 
} 
Теперь после выполнения программы получим 
True 
True 
22008501 
22008501 
9008175 
Project.Vector 
(4,3) 
На значение хэш-кода внимание обращать не следует. Мы их 
выводим только для проверки: у нас один и тот же экземпляр или разные. 
В данном случае по хэш-кодам мы видим, что экземпляры ob1 и ob3 
различаются, но метод Equals() выводит True из-за того, что у них 


101 
координаты совпадают. Изменился и результат выполнения метода 
ToString(). 


Достарыңызбен бөлісу:
1   ...   46   47   48   49   50   51   52   53   ...   66




©melimde.com 2022
әкімшілігінің қараңыз

    Басты бет
Сабақтың тақырыбы
бойынша жиынтық
жиынтық бағалау
Сабақ тақырыбы
Сабақтың мақсаты
ғылым министрлігі
тоқсан бойынша
бағдарламасына сәйкес
бағалауға арналған
Сабақ жоспары
Реферат тақырыбы
жиынтық бағалауға
сәйкес оқыту
арналған тапсырмалар
Қазақстан республикасы
білім беретін
оқыту мақсаттары
бағалау тапсырмалары
республикасы білім
Жалпы ережелер
жиынтық бағалаудың
рсетілетін қызмет
бекіту туралы
тоқсанға арналған
Қазақстан тарихы
мерзімді жоспар
Қазақстан республикасының
арналған жиынтық
қызмет стандарты
болып табылады
жалпы білім
арналған әдістемелік
Мектепке дейінгі
оқыту әдістемесі
бағалаудың тапсырмалары
Қазақ әдебиеті
пәнінен тоқсанға
Инклюзивті білім
нтізбелік тақырыптық
Зертханалық жұмыс
Әдістемелік кешені
білім берудің
республикасының білім
туралы жалпы
Қазақстанның қазіргі
Қысқа мерзімді
Жұмыс бағдарламасы
атындағы жалпы
қазақ тілінде
қазіргі заман
туралы хабарландыру