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

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

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

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

оялпд Зуясею1 с1аяя Вох1пдоеюо ( япагьс тора Маго() ( гпс х; х = 101 Сопяо1е.Хггяеьгпе("Значение х равно: " + х) // значение переменной х автоматически упаковывается О когда оно передается методу ЗЧг(). х = Вохгпдоеюо.ЗЧг(х)) Сопяо1е.иглгеььпе("Значение х в квадрате равно: " т х) ) яяаггс 1пг ЗЧг(оЬ)еся о) ( гесогп (лпс) о * (1пс) о; ) ) Вот к какому результату приводит выполнение этого кода. Значение х равно: 10 Значение х в квадрате равно: 100 В данном примере значение переменной х автоматически упаковывается при передаче методу Яс(г () .

Упаковка и распаковка позволяют полностью унифицировать систему типов в С((. Благодаря тому что все типы являются производными от класса оь1 асс, ссылка на значение любого типа может быть просто присвоена переменной ссылочного типа оЬ1есс, а все остальное возьмут на себя упаковка и распаковка.

Более того, методы класса оЬ1 есс оказываются доступными всем типам, поскольку они являются производными от этого класса. В качестве примера рассмотрим довольно любопытную программу. 372 Часть ). язык С() // Благодаря упаковке становится возможным вызов методов по значению! цзгп9 Яувсев; / с1авз Месьбпуа1це ( зсасгс нога Матп() ( Сопво1е. Нггсеэьпе (10.

тоясгьп9 () ) ) В результате выполнения этой программы выводится значение 10. Дело в том, что метод Тоэггьп9 () возвращает строковое представление объекта, для которого он вызывается. В данном случае строковым представлением значения 10 как вызывающего объекта является само значение 10( Класс оЬ~есс как универсальный тип данных Если оЬ3 есг является базовым классом для всех остальных типов и упаковка значений простых типов происходит автоматически, то класс оЬ3 есс можно вполне использовать в качестве "универсального" типа данных. Для примера рассмотрим программу, в которой сначала создается массив типа оЬ3 есс, элементам которого затем присваиваются значения различных типов данных. // Использовать класс оЬ3есс для создания массива "обобшенного" типа. цзгп9 Яузсев; с1азв Бепеггсоево ( зсасьс нога Ма1п() ( оЬ3есг(] 9а = пен оЬ1есг(10]; // Сохранить целые значения.

Гог(гпс 1=0; 1 < 3) 1++) 9а(1) = 1; // Сохранить значения типа боцЪ1е. Гог(тпг г=з; 1 < б; 1++) 9а(1) = (боцЬ1е) 1 / 2; Сохранить две строки, а также значения типа Ьоо1 и сьаг. 9а(б] = "Привет"; 9а(7] = ггце; 9а(В) = Х ) 9а(9] = "конец"; Гог(гпс 1 = 0; 1 < 9а.ьеп9ГЬ ° сопзо1е.нггсеььпе("9а[" + 1 + "1: " + 9а(г] Выполнение этой программы приводит к следующему результату. 9а(0]: 0 9а(1): 1 Глава 11.

Наследование 373 да ]2]: даГЗ]: ча]4]: ча ]5]: ча ]6]: са]7]: ча]8]: аа]9]: 2 1.5 2 2.5 Привет. Ттце х Конец Как показывает данный пример, по ссылке на объект класса оЬ1 есг можно обращаться к данным любого типа, поскольку в переменной ссылочного типа оЬ1есг допускается хранить ссылку на данные всех остальных типов.

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

Вообще говоря, целое значение следует хранить в переменной типа 1пс, строку — в переменной ссылочного типа з С сап д и т.д. А самое главное, что начиная с версии 2.0 для программирования на СФ стали доступными подлинно обобщенные типы данных — обобщения (более подробно они рассматриваются в главе 18). Внедрение обобщений позволило без труда определять классы и алгоритмы, автоматически обрабатывающие данные разных типов, соблюдая типовую безопасность. Благодаря обобщениям отпала необходимость пользоваться классом аЬ1 ест как универсальным типом данных при создании нового кода..универсальный характер этого класса лучше теперь оставить для применения в особых случаях. 376 Часть (.

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

Каждому классу предоставляется полная свобода для определения деталей своей собственной реализации интерфейса. Следовательно, один и тот же интерфейс может быть реализован в двух классах по-разному. Тем не менее в каждом из них должен поддерживаться один и тот же набор методов данного интерфейса. А в том коде, где известен такой интерфейс, могут использоваться объекты любого из этих двух классов, поскольку интерфейс для всех этих объектов остается одинаковым. Благодаря поддержке интерфейсов в СФ может быть в полной мере реализован главный принцип полиморфизма: один интерфейс — множество методов.

Интерфейсы объявляются с помощью ключевого слова 1 пьет гасе. Ниже приведена упрощенная форма объявления интерфейса. ьппетГасе имя( возврашаемнй тип имя метода1(список параметров)1 возвращаемый тип имя метода2(список параметров); !! возвращаеммй тип имя метода)((список параметров); ) где имя — это конкретное имя интерфейса. В объявлении методов интерфейса используются только их возвращаемый тип и сигнатура. Они, по существу, являются абстрактными методами. Как пояснялось выше, в интерфейсе не может быть никакой реализации.

Поэтому все методы интерфейса должны быть реализованы в каждом классе, включающем в себя этот интерфейс. В самом же интерфейсе методы неявно считаются открытыми, поэтому доступ к ним не нужно указывать явно. Ниже приведен пример объявления интерфейса для класса, генерирующего последовательный ряд чисел. рпЬ11с 1пгетгасе 1эегьеа ( ьпг Оегмехс(); // возвратить следующее по порядку число чоьг) невег(); // перезапустить чоьо Зепэгагг(ьпв х); // задать начальное значение ) Этому интерфейсу присваивается имя 1зе гйез. Префикс 1 в имени интерфейса указывать необязательно, но это принято делать в практике программирования, чтобы как-то отличать интерфейсы от классов.

Интерфейс 1зегйев объявляется как рпЬ11с и поэтому может быть реализован в любом классе какой угодно программы. Помимо методов, в интерфейсах можно также указывать свойства, индексаторы и события. Подробнее о событиях речь пойдет в главе 15, а в этой главе основное внимание будет уделено методам, свойствам и индексаторам. Интерфейсы не могут содержать члены данных. В них нельзя также определить конструкторы, деструкторы или операторные методы. Кроме того, ни один из членов интерфейса не может быль объявлен как зсас1с. Глава 12. ИнтерФейсы, структуры и перечисления 377 Реализация интерфейсов Как только интерфейс будет определен, он может быть реализован в одном или нескольких классах.

Для реализации интерфейса достаточно указать его имя после имени класса, аналогично базовому классу. Ниже приведена общая форма реализации интерфейса в классе. с1аяя имя класса : имя интерфейса ( тело класса ) где имя интерфейса — это конкретное имя реализуемого интерфейса. Если уж интерфейс реализуется в классе, то это должно быть сделано полностью. В частности, реализовать интерфейс выборочно и только по частям нельзя. В классе допускается реализовывать несколько интерфейсов. В этом случае все реализуемые в классе интерфейсы указываются списком через запятую.

В классе можно наследовать базовый класс и в тоже время реализовать один или более интерфейс. В таком случае имя базового класса должно быть указано перед списком интерфейсов, разделяемых запятой. Методы, реализующие интерфейс, должны быть объявлены как рпЬ11с.

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

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

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

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

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