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

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

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

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

РЬопеЬРяс<уггепб> р11яс = пен РЬопе11яг<Рг1епб>(); р1гяГ.АНН(пен Ргаепд(кфом", "555-12Э4", Сгое))ю р11яс.йдб(пен Рг1епб("Гари", "555-6756", сгибе)); р11яс.йсЫ(пен Рггепс((" Матт", "555-9254", Га1яе))4 агу [ // Найти номер телефона по заданному имени друга. Рггепб Ргпб = р11яс.угпбвуиаше("Гари" ); Сопяо1е.нгасе(1гпб.наше + ": " + Ргпб.ипшбег); 1г(ггпб.1яногяиошЬег) Сопяо1е.нггсе1)пе(" (рабочий)" ); е1яе Сопяо1е.иг1се1>пе()) ) сассЬ(носуонповхсерс1оп) ( сопяо1е.иг1се51пе("Не найдено"); ) Сопяо1е.иг1оеввпе () // Следугщий код также допустим, поскольку я классе Борр1>ег также реализуется интерфейс 1РЬопенпшоег.

РЬопепаяг<Борр11ег> р11яс2 = пен РЬопе11яс<Бпрр11ег>(); р11яг2.Асс(пен Борр11ег(кфирма 61оЬа1 Нагбиаге", "555-8834")); р11яс2.АНЙ(пем Бпрр1>ег("Агентстзо Сошрссег ХагеЬоояе", "555-9256"))4 р11яг2.Або(пеи Бпрр1гег(5Компанин ХесногКС1су", "555-2564")); сгу ( О Найти наименование постаяшика по заданному номеру телефона. Бпрр11ег яр = р11я<2.Р1псйунпшЬег("555-2564"); Сопяо1е.нг1геЬгпе(яр.наше + ": " + яр.иошбег); ) сассЬ(носуоопбвхсерс1оп) ( Сопяо1е.Хг1сеь1пе("Не найдено"); ) Следугщее объявление недопустимо, поскольку 598 Часть 1. язык С() // в классе Еша11Ргьепб НЕ реализуется интерфейс 1РЬопеиошбег.

Рьопеььяс<еша11Рг1епб> р11ягз О пен Рпопеъгвс<кяш11гггепд>(); // Ошибка! ) В этой версии программы ограничение на интерфейс, указываемое в классе РЬопесзяс, требует, чтобы аргумент типа реализовал интерфейс 1РЬопебьяг. А поскольку этот интерфейс реализуется в обоих классах, Ггфепб и Еорр11ег, то они относятся к допустимым типам, привязываемым к типу Т. В то же время интерфейс не реализуется в классе Ета11ргьепб, и поэтому этот класс не может быть привязан к типу Т. Для того чтобы убедиться в этом, удалите символы комментария в двух последних строках кода в методе Ма1п ( ) .

Вы сразу же обнаружите, что программа не компилируется. Применение ограничения певг () на конструктор Ограничение пем () на конструктор позволяет получать экземпляр объекта обобщенного типа. Как правило, создать экземпляр параметра обобщенного типа не удается. Но это положение изменяет ограничение пем (), поскольку оно требует, чтобы аргумент типа предоставил конструктор без параметров. Им может быть конструктор, вызываемый по умолчанию и предоставляемый автоматически, если явно определяемый конструктор отсутствует или же конструктор без параметров явно объявлен пользователем. Накладывая ограничение пем ( ), можно вызывать конструктор без параметров для создания объекта. Ниже приведен простой пример, демонстрирующий наложение ограничения пем () .

// Продемонстрировать наложение Ограничения оем() на конструктор. оя1по Бувсеш) с1аяя МуС1авя ( роЬ11с МуС1аяя() ( О ) О.. ) с1аяя Теяг<Т> ноете Т : пен() ( Т оЬЗ; роб11с Теяс() ( Этот код работоспособен благодаря наложению ограничения пен() оЬЗ = лен Т(); О создать объект типа Т с1аяя СопяСопяггатпЬРешо ( Глава 18. Обобщения 599 агасгс чогб Мага () Теас<Мус1ааз> х = пан Теас<Мус1ааз>(); ) ) Прежде всего обратите внимание на объявление класса т ее с. с1аза теас<Т> иьеге Т : лен() ( В силу накладываемого ограничения леи () любой аргумент типа должен предоставлять конструктор без параметров.

Далее проанализируем приведенный ниже конструктор класса тезс. рдЬ11с Тезс() ( !/ Этот код работоспособен благодаря наложению ограничения пеи() оЬЗ = пан Т()г !! создать объект типа Т ) В этом фрагменте кода создается объект типа Т, и ссылка на него присваивается переменной экземпляра оЬЗ. Такой код допустим только потому, что ограничение леи () требует наличия конструктора. Для того чтобы убедиться в этом, попробуйте сначала удалить ограничение лен (), а затем попытайтесь перекомпилировать программу. В итоге вы получите сообщение об ошибке во время компиляции.

В методе Ма1п () получается экземпляр объекта типа Тезг, как показано ниже. теас<мус1ааз> х = пан тезс<мус1ааа>()г Обратите внимание на то, что аргументом типа в данном случае является класс МуС1азз и что в этом классе определяется конструктор без параметров. Следовательно, этот класс допускается использовать в качестве аргумента типа для класса Т ее г. Следует особо подчеркнуть, что в классе МуС1азз совсем не обязательно определять конструктор без параметров явным образом. Его используемый по умолчанию конструктор вполне удовлетворяет накладываемому ограничению.

Но если классу потребуются другие конструкторы, помимо конструктора без параметров, то придется объявить явным образом и вариант без параметров. Что касается применения ограничения пеи (), то следует обратить внимание на три других важных момента. Во-первых, его можно использовать вместе с другими ограничениями, но последним по порядку. Во-вторых, ограничение лен () позволяет конструировать объект, используя только конструктор без параметров, — даже если доступны другие конструкторы.

Иными словами, передавать аргументы конструктору параметра типа не разрешается. И в-третьих, ограничение деи () нельзя использовать одновременно с ограничением типа значения, рассматриваемым далее. Ограничения ссылочного типа и типа значения Два других ограничения позволяют указать на то, что аргумент, обозначающий тип, должен быть либо ссылочного типа, либо типа значения. Эти ограничения оказываются полезными в тех случаях, когда для обобщенного кода ва>хно провести различие между ссылочным типом и типом значения.

Ниже приведена общая форма ограничения ссылочного типа. нбеге Г: с1ааа 600 Часть!. Язык С() В этой форме с оператором ыЬеге ключевое слово с1аяв указывает на то, что аргумент Т должен быть ссылочного типа. Следовательно, всякая попытка использовать тип значения, например Тпг или Ьоо1, вместо т приведет к ошибке во время компиляции. Ниже приведена общая форма ограничения типа значения. нЬеге Т: яггосг В этой форме ключевое слово я С гпсг указывает на то, что аргумент Т должен быть типа значения.

(Напомним, что структуры относятся к типам значений.) Следовательно, всякая попытка использовать ссылочный тип, например вгг1пц, вместо Т приведет к ошибке во время компиляции. Но если имеются дополнительные ограничения, то в любом случае с1ая я или вг гпсг должно быть первым по порядку накладываемым ограничением. Ниже приведен пример, демонстрирующий наложение ограничения ссылочного типа. // Продемонстрировать наложение ограничения ссылочного типа. оягпЧ Яуягеш; с1авв Мус1авя ( О... ) Наложить ограничение ссылочного типа.

с1аяя Теяс<Т> нЬеге Т : с1авя ( Т оЬЗ; роЬТЬс Теяс() ( О Следукгяий оператор допустим только потому, что аргумент Т гарантированно относится к ссылочному типу, что позволяет присваивать пустое значение. оЪ) = пн11; с1аяв С1авясопвгга1псбешо ( ясасьс ногг( Маги() ( // Следующий код вполне допустим, поскольку МуС1аяя является классом.

Теяг<муС1аяя> х = пен Теяс<муС1авв>()г // Следующая строка кода содержит ошибку, поскольку // 1пс относится к типу значения. Теяс<1пс> у = пен Тевг<гпг>()Г ) ) Обратите внимание на следующее объявление класса теяс. с1авя Теяс<Т> нЬеге Т : с1аяв ( Глава 18. Обобщения 601 Ограничение с1азз требует, чтобы любой аргумент Т был ссылочного типа. В данном примере кода это необходимо для правильного выполнения операции присваивания в конструкторе класса Тезс.

рньььс Тевс () Уг' Следукший оператор допустим только потому, что аргумент Т гарантированно относится к ссмлочному /! типу, что позволяет присваивать пустое значение. оь) = по11~ ) В этом фрагменте кода переменной оЬ1 типа т присваивается пустое значение.

Такое присваивание допустимо только для ссылочных типов. Как правило, пустое значение нельзя присвоить переменной типа значения. (Исключением из этого правила является обнуляемый пгип, который представляет собой специальный тип структуры, инкапсулирующий тип значения и допускающий пустое значение (пи11). Подробнее об этом — в главе 20.) Следовательно, в отсутствие ограничения такое присваивание было бы недопустимым, и код не подлежал бы компиляции. Это один из тех случаев, когда для обобщенного кода может оказаться очень важным различие между типами значений и ссылочными типами.

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

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

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

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