|
Программирование >> Обработка исключительных ситуаций
Класс 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 ) ;
|
© 2006 - 2024 pmbk.ru. Генерация страницы: 0
При копировании материалов приветствуются ссылки. |