Программирование >>  Обработка исключительных ситуаций 

1 ... 60 61 62 [ 63 ] 64 65 66 ... 142


Класс object

Корневой класс System.Object всей иерархии объектов .NET, называемый в С# object, обеспечивает всех наследников несколькими важными методами. Производные классы могут использовать эти методы непосредственно или переопределять их.

Console.WriteLine( вжкжжж!! );

class Самолет

{ public Самолет()

левый = new ДвигательО ; прав1й = new ДвигательО;

public void Запустить двигатели()

левый.Запуск(); правый.Запуске);

Двигатель левый, правый;

class Classl

{ static void MainO

Самолет AH24 1 = new Самолете);

АН241.3апустить двигатели();

Результат работы программы:

зжжжж!! зжжжж!!

В методе Запустить двигатели запрос на запуск двигателей передается, или, как принято говорить, делегируется вложенному классу.

В отличие от наследования, когда производный класс является (is а) разновидностью базового, модель включения-делегирования реализует отношение имеет (has а). При проектировании классов следует выбирать модель, наиболее точно отражающую смысл взаимоотношений классов, например, моделируемых объектов предметной области.



Класс object часто используется и непосредственно при описании типа параметров методов для придания им общности, а также для хранения ссылок на объекты различного типа - таким образом реализуется полиморфизм.

Открытые методы класса System.Object перечислены ниже.

Метод Equals с одним параметром возвращает значение true, если параметр и вызывающий объект ссылаются на одну и ту же область памяти. Синтаксис:

public virtual bool Equals( object obj );

Метод Equals с двумя параметрами возвращает значение true, если оба параметра ссылаются на одну и ту же область памяти. Синтаксис:

public static bool Equals( object obi, object ob2 );

Метод GetHashCode формирует хеш-код объекта и возвращает число, однозначно идентифицирующее объект. Это число используется в различных структурах и алгоритмах библиотеки. Если переопределяется метод Equals, необходимо перегрузить и метод GetHashCode. Подробнее о хеш-кодах рассказывается в разделе Абстрактные структуры данных (см. с. 291). Синтаксис:

public virtual int GetHashCodeO;

Метод GetType возвращает текущий полиморфный тип объекта, то есть не тип ссылки, а тип объекта, на который она в данный момент указывает. Возвращаемое значение имеет тип Туре. Это абстрактный базовый класс иерархии, использующийся для получения информации о типах во время выполнения1. Синтаксис:

public Type Get Туре О;

Метод ReferenceEquals возвращает значение true, если оба параметра ссылаются на одну и ту же область памяти. Синтаксис:

public static bool( object obi, object ob2 );

Метод ToString по умолчанию возвращает для ссылочных типов полное имя класса в виде строки, а для значимых - значение величины, преобразованное в строку. Этот метод переопределяют для того, чтобы можно было выводить информацию о состоянии объекта. Синтаксис:

public virtual string ToStringO

В производных объектах эти методы часто переопределяют. Например, можно j

переопределить метод Equals для того, чтобы задать собственные критерии срав- !

нения объектов, потому что часто бывает удобнее использовать для сравнения не j ссылочную семантику (равенство ссылок), а значимую (равенство значений).

Пример применения и переопределения методов класса object для класса Monster * приведен в листинге 8.5.

1 Мы рассмотрим этот тип в главе 12 (см. с. 279).



Листинг 8.5. Перегрузка методов класса object using System;

namespace ConsoleApplicationl

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 GetTypeO != obj.GetTypeC) ) return false;

Monster temp = (Monster) obj; return health == temp.health &&

ammo temp.ammo &&

name == temp.name;

public override int GetHashCode()

return name.GetHashCode();

public override string ToStringO

return string.Format( Monster {0} \t health = {1} ammo = {2} , name, health, ammo );

string name;

int health, ammo;

class Classl

{ 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 ) ;



1 ... 60 61 62 [ 63 ] 64 65 66 ... 142

© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки.
Яндекс.Метрика