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

Г. Шилдт - С# 3.0 Полное руководство. 2010 (1160798), страница 108

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

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

рцвтзс опзеск ПеСОЫ ) ( кекцгп оЬ; ) // Показать тип переменной оЬ. рцвтзс иоьд Злоытуре() ( сопзо1е.игъсетдпе ("тип переменной оь: " ь оь.оестуре() ) ) ) // Продемонстрировать применение необобщенного класса. с1азз Ноппеппеио ( зкатзс тоид Иазп() ( Нопцеп 10Ьт Глава 18. Обобщения 563 // Создать объект класса Иопбеп. 10Ь = пен Нопбеп(102); // Показать тип данных, храдящнхся в переменной 10Ь. 10Ь. Бпонтуре (); // Получить значение переменной 10Ь. // На этот раз потребуется приведение типов. 1пс я = (1пс) 10Ь.6еГОЬ(); Сопзо1е.иггсеъ1пе("Значение: " ь т); Сопзо1е.иг1се11пе()л // Создать еще один объект класса Иоп6еп и // сохранить строку з переменной 1Г.

Нопбеп зсгОЬ = пен Нопбеп("Тест на необобщенность")~ // Показать тип данных, хранящихся в переменной зсгОЬ. зсгОЬ.БЛонТуре(); // Получить значение переменной зсгОЬ. // И в этом случае требуется приведение типов. Бсг1пп зсг = (зсг1ЛП) зсгОЬ.ПеГОЬ() л сопэо1е.игагетгпе("значение: " + згг); // Этот код компилируется, но он принципиально неверный! 10Ь эггоЬл // Следующая строка кода приводит к исключительной // ситуации зо время выполнения. // я = (Тпс) 10Ь.ОеГОЬ(); // Ошибка при выполнении! ) ) При выполнении этой программы получается следующий результат: Тнп переменной оЬ: Бузсещ.1ЛГ32 Значение: 102 Тнп переменной оЬ: Бузсещ.зсг1пд Значение: Тест на необобщенность Как видите, результат выполнения этой программы аналогичен результату предыдущей программы. В этой программе обращает на себя внимание ряд любопытных моментов.

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

564 часть ). Язык С» Начнем со следующей строки кода: ьпС ч = (1пг) 1ОЬ.ОеСОЬ()т Теперь возвращаемым типом метода оесОЬ () является оЬбесс, а следовательно, для распаковки значения, возвращаемого методом оеСОЬ (), и его последующего сохранения в переменной ч требуется явное приведение к типу 1пс. Если исключить приведение типов, программа не будет скомпилирована. В обобщенной версии этой программы приведение типов не требовалось, поскольку тип 1пс указывался в качестве аргумента типа при создании объекта 1ОЬ. А в необобщенной версии этой программы потребовалось явное приведение типов. Но это не только неудобно, но и чревато ошибками.

А теперь рассмотрим следующую последовательность кода в конце анализируемой здесь программы: // Этот код компилируется, но он принципиально неверный! 1ОЬ = вггсьт // Следующая строка кода приводит к исключительной // ситуации во время выполнения. // ч = (ъпС) 1ОЬ .СеСОЬ () т // Ошибка при выполнении! В этом коде значение переменной зсгоь присваивается переменной 10ь. Но переменная зсгоЬ ссылается на объект, содержащий символьную строку, а не целое значение.

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

Для того чтобы убедиться в этом, удалите символы комментария в начале данной строки кода, скомпилируйте, а затем выполните программу. При ее выполнении возникнет ошибка. Упомянутая выше ситуация не могла бы возникнуть, если бы в программе использовались обобщения. Компилятор выявил бы ошибку в приведенной выше последовательности кода, если бы она была включена в обобщенную версию программы, и сообщил бы об этой ошибке, предотвратив тем самым серьезный сбой, приводящий к исключительной ситуации при выполнении программы. Возможность создавать типизированный код, в котором ошибки несоответствия типов выявляются во время компиляции, является главным преимуществом обобщений.

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

Обратите внимание на то, как тип переменной ОЬ экземпляра класса Нопоеп получается с помощью метода ЗЬоытуре О в следующей строке кода: Глава 18. Обобщения 565 Сопэо1е .Иг1сеьгпе ("Тип переменной оЬ: " + оЬ .Пестуре () ) ) Как пояснялось в главе 11, в классе ОЬ1есс определен ряа методов, доступных для всех типов данных. Одним из иих является метод пестуре (), возвращающий объект класса туре, который описывает тип вызывающего объекта во время выполнения. Следовательно, конкретный тип объекта, иа который ссылается переменная оЬ, становится известным во время выполнения, несмотря иа то, что тип переменной ОЬ указан в исходном коде как ОЬ1есс. Именно поэтому в среде СЕВ будет сгенерировано исключение при попытке произвести неверное приведение типов во время выполнения программы.

Обобщенный класс с двумя параметрами типа В классе обобщенного типа можно указать два или более параметра типа. В этом случае параметры типа указываются списком через запятую. В качестве примера ниже приведеи класс Тноьеп, являющийся вариантом класса беп с двумя параметрами типа. // Простой обобщенный класс с двумя параметрами // типа Т и Ч. пз1пс зуагещ; с1авз тнооеп<т, ч> ( т оь12 Ч оЬ2; // Обратите внимание на то, что в этом конструкторе // указываются параметры типа Т и Ч. ривтъс Тнооеп(Т о1, Ч о2) ( оЬ1 = о1; оЬ2 = о2; ) // Показать типы Т и Ч.

рпвьъс чо1б зьонТурез() ( Сопзо1е.кгъгеъьпе("К типу Т относится " Ь Суреот(Т)); Сопэо1е.кгьгеъъпе("К типу Ч относится " Ь Гуреот(Ч)); ) рпЬ11с Т сегоЬ1() ( геспгп оЬ12 ) рпЬ11с Ч ПеГОЬ)2() ( геспгп оЬ2; ) ) // Продемонстрировать применение обобщенного класса // с двумя параметрами типа. с1аяз 51щроеп ( зсасъс чогб Иа1п() ( 566 Часть(. язык С» тнобеп<ъпс, вгг1пч> ГБОЬ1 = пен Тнобеп<1пс, всгтпч>(119, "Альфа Бета Гамма")г // Показать типы. ГБОЬ1.вьоитурев() // Получить и вывести значения.

Тпс ч = ГЗОЬ9.9есоЬ1()/ Сопво1е.нг1сеътпе("Значение: " + ч); зсгъпч всг = ГБОЬЯ.беГОЬ)2(); Сопво1е.нгагеъьпе("Значение: " + вгг); ) ) Эта программа дает следующий результат: К типу Т относится 5увсеи.1пс32 К типу У относится 5увсев.зсгтпч Значение: 119 Значение: Альфа Бета Гамма Обратите внимание на то, как объявляется класс тиобеп: с1авв Тиобеп<Т, у> ( В этом объявлении указываются два параметра типа т и у, разделенные запятой. А поскольку у класса Тыобеп два параметра типа, то при создании объекта этого класса необходимо указывать два соответствующих аргумента типа, как показано ниже. Тнобеп<1пг, всг1пч> ГЗОЬ9 = пен тнобеп<ъпг, вгг1пч>(119, "Альфа Бета Гака<а")! В данном случае вместо т подставляется тип Тпс, а вместо у — тип всг1пб. В представленном' выше примере указываются аргументы разного типа, но они могут быть и одного типа.

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

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

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

Г. Шилдт - С# 3.0 Полное руководство
C_sharp_3TCR_code
Apndx.lst
Chap2.lst
Chap3.lst
Chap4.lst
Chap5.lst
Chap6.lst
Chap7.lst
Chap8.lst
Chap9.lst
Chap10.lst
Chap11.lst
Chap12.lst
Chap13.lst
Chap14.lst
Chap15.lst
Chap16.lst
Chap17.lst
Chap18.lst
Chap19.lst
Chap20.lst
Chap21.lst
Chap22.lst
Chap23.lst
Chap24.lst
Chap25.lst
Chap26.lst
Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6461
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее