Главная » Просмотр файлов » Г. Шилдт - С#4.0 Полное руководство

Г. Шилдт - С#4.0 Полное руководство (1160795), страница 69

Файл №1160795 Г. Шилдт - С#4.0 Полное руководство (Г. Шилдт - С#4.0 Полное руководство) 69 страницаГ. Шилдт - С#4.0 Полное руководство (1160795) страница 692019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

Текст из файла (страница 69)

рпЬ11с Неспапд1е(бопьае и, бопЪ1е Ь) Ьаве(н, Ь, "прямоугольник")( ) // Сконструировать квадрат. роЪ1[с Неспапд1е(бопЪ1е х) Ьаве(х, "прямоугольник") ( ) // Сконструировать копию объекта типа Неспапд1е. рпЬ11с Неспапд1е(кесвапд1е оЬ) : Ьаве(оЬ] ( ) // Возвратить логическое значение Сгое, если // прямоугольник окажется квадратом. рпЬ11с Ьоо1 1вЯдпаге() ( 11(ктбСЬ == Небдьп) гепогп Сгпе) геспгп Та1ве; ) // Переопределить метод Агеа() для класса Веспапд1е.

риЬ11с очеггббе бооЬ1е Агеа() ( гевпгп Нббвь * Не[дьп) ) с1авз АЬвЯЬаре ( впав[с чо[б Иабп() ( ТноОЯЬаре[] вьарез = пен ТноОЯЬаре[4]у зьарев[0] = пен Тг1апд1е("прямоугольный", 8.0, 12.0); вьарев(1] = пен Неспапд1е(10); Глава 11. Насяедование 367 ядярея[2) = пен Кессяп01е(10, 4)г ябарея[З] = пен тг1ап01е(7.0); гпг(гпг г=0; 1 < яьарея.ьепчг)п 1+ь) ( Сопяо1е.вггсеыпе("Объект — " + вбярев[1).паве)) Сппяа1е.иггсешпе("Площадь равна " + явярея[1].Агяя())г Сопяо1е.нг1Геъгпе() ) Как показывает представленный выше пример программы, во всех производных классах метод Агеа () должен быть непременно переопределен, а также объявлен абстрактным.

Убедитесь в этом сами, попробовав создать производный класс, в котором не переопределен метод Аде а () . В итоге вы получите сообщение об ошибке во время компиляции. Конечно, возможность создавать ссылки на объекты типа Тнопзпаре по- прежнему существует, и это было сделано в приведенном выше примере программы, но объявлять объекты типа ТноОБЬаре уже нельзя.

Именно поэтому массив вЬарев сокращен в методе )чаьп () до 4 элементов, а объект типа ТноОБЬаре для общей двухмерной формы больше не создается. Обратите также внимание на то, что в класс Тисов Ьаре по-прежнему входит метод БЬонР1щ () и что он не объявляется с модификатором аЬяггасг. В абстрактные классы вполне допускается (и часто практикуется) включать конкретные методы, которые могут быть использованы в своем исходном виде в производном классе. А переопределению в производных классах подлежат только те методы, которые объявлены как аЬясгасп Предотвращение наследования с помощью ключевого слова веа1ей Несмотря на всю эффективность и полезность наследования, иногда возникает потребность предотвратить его. Допустим, что имеется класс, инкапсулирующий последовательность инициализации некоторого специального оборудования, например медицинского монитора. В этом случае требуется, чтобы пользователи данного класса не могли изменять порядок инициализации монитора, чтобы исключить его неправильную настройку.

Но независимо от конкретных причин в С() имеетсд возможность предотвратить наследование класса с помощью ключевого слова яеа1ес[. Для того чтобы предотвратить наследование класса, достаточно указать ключевое слово яеа1ег[ перед определением класса. Как и следовало ожидать, класс не допускается объявлять одновременно как аЬясгасс и веа1ес], поскольку сам абстрактный класс реализован не полностью и опирается в этом отношении на свои производные классы, обеспечивающие полную реализацию.

Ниже приведен пример объявления класса типа яеа1ес1 яеа1еб с1аяя А ( ) /! Следующий класс недопустим. 368 Часть (. Язык С(г с1авя В : А ( /Г ОШИБКА! Наследовать класс А нельзя Как следует из комментариев в приведенном выше фрагменте кода, класс В не может наследовать класс А, потому что последний объявлен как яеа1ес1 И еще одно замечание: ключевое слово я еа1еа( может быть также использовано в виртуальных методах для предотвращения их дальнейшего переопределения. Допустим, что имеется базовый класс В и производный класс В.

Метод, объявленный в классе В как чьггпа1, может быть объявлен в классе Р как яеа1ег(. Благодаря этому в любом классе, наследующем от класса ()в предотвращается переопределение данного метода. Подобная ситуация демонстрируется в приведенном ниже фрагменте кода, с1авя В ( рпЬ11с чьгапв1 чогг( Мумегьог(() ( I* ... *l ) ) с1аяя О : В ( Здесь герметизируетсн метод МумебАоб() и предотвращается егп дальнейшее переопределение.

яеа1еб рпЬ1ьс пчегг1бе чо1б Муиесьог(() ( /* ... *( ) с1аяя Х : В ( !У Ошибка! Метод Мунесьог(() герметизирпван! рпЬ11с очегггг(е чоьб Муиесьпг(() ( /* ... *l ) ) Метод Муиесбог) () герметизирован в классе В, и поэтому не может быть переопределен в классе Х. Класс 0Ь~ ест В С() предусмотрен специальный класс ОЬ з есг, который неявно считается базовым классом длл всех остальных классов и типов, включая и типы значений.

Иными словами, все остальные типы являются производными от был есс. Это, в часпккти, означает, что переменнал ссылочного типа ОЬп еса может ссылаться на объект любого другого типа. Кроме того, переменная типа ОЬп есс может ссылаться на любой массив, поскольку в С() массивы реализуются как объекты. Формально имя ОЬз есг считается в СЗ еще одним обозначением класса Буясеш.

ОЬ1есс, входящего в библиотеку классов для среды .(А)ЕТ Ргагпечгог)г. В классе ОЬ1есг определяютая методы, приведенные в табл. 11.1. Это означает, что они доступны для каждого объекта. Некоторые из этих методов требуют дополнительных пояснений. По умолчаник) метод Ег(па1я (ОЬпесс) определяет, ссылается ли вызывающий объект на тот же самый объект, что и объект, указываемый в качества аргумента этого метода, т.е. он определяет, являются ли обе ссылки одинаковыми.

Метод еа(па1я (оьпесс) возвращает логическое значение сапе, если сравниваемые объекты одинаковы, в противном случае — логическое значение га1яе. Он может быть также переопределен в создаваемых классах. Это позволяет выяанитгь что же означает равенство объектов для создаваемого клааса. Например, метод Ег(па1я (ОЬпесс) можно определить таким образом, чтобы в нем сравнивалось содержимое двух объектов.

Глава 11. Наследование 369 Таблица 11.1. Методы класса оЬтесЬ Метод Назначение риЬ1гс чдггпа1 Ьоо1 Ес(па1я(оЬТебг оЬ) рпЬ11с ясаг1с Ьоо1 Ег(па1я(оЬТесг оЬтд, оЬ3есг оЬТВ) ргосессес) Едпа11зе() Определяет, является ли вызывающий объект таким же, как и объект, доступный по ссьвке оЬ Определяет, является ли объект, доступный по ссылке оЬ)'л, таким же, как и обьект, доступный по ссылке оЬ)'В Выполняет завершающие действия перед "сборкой му- сора".

В СФ метод Еьпа11ве () доступен посредством деструктора Возвращает хеш-код, связанный с вызывающим обьекюм Получает тип объекта во время выполнения программы Выполняет неполное копирование обьекта, т.е. копиру- ются только члены, но не объекты, на которые ссылают- ся зти члены Определяет, делаются ли ссылки оЬ тл и оЬ тв на один и тот же обьекг рпЬ11с чзггпа1 Тпг СеГНаяЬСос(е() риЬ11с Туре Оестуре() ргогессес( оЬ1есс ИоглЬегмьвсС1опс О рпЬ11с ясаг1с Ьоо1 нетегепсеег(па1я(оЪТ оЬтд, оЬ5есг оЬ)В) рпЬ11с чдггиа1 яггдп9 ТоБгг1пд() Возвращает строку, которая описывает объект уу Продемонстрировать применение метода Тоясгьпч() чя1пс яуягеяо с1аяя НуС1аяв ( ясасьс ьпс соипс = С; Тпс ьгЬ рчь11с МуС1аяя() ( Метод ОегнаяЬСог(е () возвращает хеш-код связанный с вызывающим объектом.

Этот хеш-код можно затем использовать в любом алгоритме, где хеширование применяется в качестве средства доступа к хранимым объектам. Следует, однако, иметь в виду, что стандартная реализация метода ОеСНаяЬСос(е () не пригодна на все случаи применения. Как упоминалось в главе 9, если перегружается оператор ==, то обычно приходится переопределять методы Ес(па1я (оЬТесс) и ОесНаяЬСос(е (), посколькучаще всего требуется, чтобы метод Ег(ца1я (оЬТесг) и оператор == функционировали одинаково. Когда же переопределяется метод Ег(па 1 я (оЬ1 ест ), то следует переопределить и метод Оеснаяьсос(е (), чтобы оба метода оказались совместимыми. Метод тоБсгдп9 () возвращает символьную строку, содержащую описание того объекта, для которого он вызывается.

Кроме того, метод Товсг1п9 () автоматически вызывается при выводе содержимого объекта с помощью метода Игдсе11пе () . Этот метод переопределяется во многих классах, что позволяет приспосабливать описание к конкретным типам объектов, создаваемых в этих классах. Ниже приведен пример применения данного метода. 370 Часть!. язык С() гб = соопС," соопв++; ) роЬ11с очегг1бе ясг1пэ Тозвг1пэ() ( геспгп "Объект Ф" + 1д + " типа МуС1авя"; ) ) с1авя Тевг ( ввас1с чо1б Маьп() ( МуС1авя оЬ1 = пее МуС1авя (); МУС1аяв оЬ2 = пем Мус1авв(): МуС1авя оЬЗ = пем МуС1аяя()) Сопяо1е.нг1сеЬ1пе(оЬ1) Сопво1е.нг1веэгпе(оЬ2) Сопво1е.нг1сеЬ1пе(оЬЗ) При выполнении этого кода получается следующий результат.

Объект ()О типа МуС1аяя Объект $1 типа МуС1авя Объект $2 типа МуС1аяя Упаковка и распаковка Как пояснялось выше, все типы в С№, включая и простые типы значений, являются производными от класса ОЬЗ есг. Следовательно, ссылкой типа оЬЗ есг можно воспользоваться для обращения к любому другому типу, в том числе и к типам значений. Когда ссылка на объект класса ОЬЗ есг используется для обращения к типу значения, то такой процесс называется упаковкой. Упаковка приводит к тому, что значение простого типа сохраняется в экземпляре объекта, т.е. "упаковывается" в объекте, который затем используется как и любой другой объект.

Но в любом случае упаковка происходит автоматически. Для этого достаточно присвоить значение переменной ссылочного типа ОЬЗ ест, а об остальном позаботится компилятор С№. Распаковка представляет собой процесс извлечения упакованного значения из объекта. Это делаешься с помощью явного приведения типа ссылки на объект класса ОЬЗ есг к соответствующему типу значения. Попытка распаковать объект в другой тип может привести к ошибке во время выполнения. Ниже приведен простой пример, демонстрирующий упаковку и распаковку. // Простой пример упаковки и распаковки. пагод Буясеи) с1авя Вохьпдоеио ( втаг1с чогб Магп() ( ).пг х; оЪЗесг оЬЗ; Глава 11.

Наследование 371 х = 10; оЬ1 = х; // упаковать значение переменной х в объект гпс у = (1пс)оь1; // распаковать значение из объекта, доступного по // ссылке оЬ1, в переменную типа гпс Сопяо1е.ХГЬСЕЬ1ПЕ (У) 1 В этом примере кода выводится значение 10. Обратите внимание на то, что значение переменной х упаковывается в объект простым его присваиванием переменной оЬ1, ссылающейся на этот объект. А затем это значение извлекается из объекта, доступного по его ссылке оь1, и далее приводится к типу Ьпс. Ниже приведен еще один, более интересный пример упаковки. В данном случае значение типа 1пс передается в качестве аргумента методу Яс(г (), который, в свою очередь, принимает параметр типа оь1есс. // Пример упаковки при передаче значения методу.

Характеристики

Тип файла
DJVU-файл
Размер
7,66 Mb
Тип материала
Высшее учебное заведение

Список файлов книги

Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6418
Авторов
на СтудИзбе
307
Средний доход
с одного платного файла
Обучение Подробнее