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

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

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

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

Это один из тех случаев, когда для обобщенного кода может оказаться очень важным различие между типами значений и ссылочными типами. Ограничение типа значения является дополнением ограничения ссылочного типа. Оно просто гарантирует, что любой аргумент, обозначающий тип, должен быть типа значения, в том числе яггпсс и еппш. (В данном случае обнуляемый тип не относится к типу значения.) Ниже приведен пример наложения ограничения типа значения. // Продемонстрировать наложение ограничения типа значения. озалом зуягещи ясгосс Музсгпсс ( //...

) 584 Часть (. Язык С() с1авв МуС1авв ( // ... ) с1авв тевк<т> ньеге т: вкгиск ( Т оь)к рпЬ11с Тевк(Т х) ( оЬЗ = х/ ) с1авв Ча1песопвкгаьпсоещо ( всакгс то1б мвтп() ( // Оба следующих объявления вполне допустимы. Тевк<муздтпсг> х = пен Тевс<нузсвпсс>(пен Музкгпсс()) Тевс<ъпк> у = пен Тевк<ъпс>(10)к // й следующее объявление недопустимо! // тевс<мус1авв> х = пен тевс<мус1авв>(пен мус1авв()) ) ) В этом примере кода класс тевс объявляется следующим образом: с1авв Тевс<Т> ньеге Т: всгпск ( На параметр типа т в классе тевс накладывается ограничение всгпсс, и поэтому к нему могут быть привязаны только аргументы типа значения.

Это означает, что объявления тевс<музсгпсс> и тевс<1пс> вполне допустимы, тогда как объявление Тевг<Мус1авв> недопустимо. Для того чтобы убедиться в этом, удалите символы комментария в начале последней строки приведенного выше кода и перекомпилируйте его. В итоге вы получите сообщение об ошибке во время компиляции. Установление связи между двумя параметрами типа с помощью ограничения Существует разновидность ограничения на базовый класс, позволяющая установить связь между двумя параметрами типа. В качестве примера рассмотрим следующее объявление обобщенного класса: с1авв Оеп<т, Ч> ньеке Ч: Т ( В этом объявлении оператор инесе уведомляет компилятор о том, что аргумент типа, привязанный к параметру типа ч, должен быть таким же, как и аргумент типа, привязанный к параметру типа т, или же наследовать от него.

Если подобная связь отсутствует при объявлении объекта типа реп, то во время компиляции возникнет ошибка. Такое ограничение на параметр типа называется неприкрытым ограничением типа. В приведенном ниже примере демонстрируется наложение этого ограничения. Глава! б. Обобщения 585 // установить связь между двумя параметрами типа. пягпб Яувсеил с1авв А ( //... ) с1авя В ". А ( // ... ) // Здесь параметр типа Ч должен наследовать от параметра типа Т. с1авв беп<Т, у> инесе у: Т [ // с1авв Нанеасопяпка1пепеио ( всас1с тогс( Магп() ( // Это объявление вполне допустимо, поскольку // класс В наследует от класса А.

беп<А, В> х = пен беп<А, В>(); // й вто объявление недопустимо, поскольку // класс А не наследует от класса В. // бел<В, А> у = пеи бел<В, А> () л Обратите внимание на то, что класс В наследует от класса А. Проанализируем далее оба объявления объектов класса беп в методе мавп () .

Как следует из комментария к первому объявлению беп<А, В> х пеи бел<А, В> () ~ оно вполне допустимо, поскольку класс в наследует от класса А. Но второе объявление // беп<В, А> у = пеи бел<В, й> (); недопустимо, поскольку класс А не наследует от класса В. Применение нескольких ограничений С параметром типа может быть связано несколько ограничений. В этом случае ограничения указываются списком через запятую. В этом списке первым должно быть указано ограничение с1а за либо зс го ос, если оно присутствует, или же ограничение на базовый класс, если оно накладывается. Указывать ограничения с1азз или зегпсе одновременно с ограничением на базовый класс не разрешается.

Далее по списку должно следовать ограничение на интерфейс, а последним по порядку — ограничение пеи () . Например, следующее объявление считается вполне допустимым: с1авв беп<Т> ийеке Т: Муб1авв, 1Мугпеехвасе, пеи() ( // 586 Часть!, Язык С() В данном случае параметр типа т должен быть заменен аргументом типа, наследующим от класса МуС1азз, реализующим интерфейс 1Му1пСеггасе и использующим конструктор без параметра. Если же в обобщении используются два или более параметра типа, то ограничения на каждый из них накладываются с помощью отдельного оператора ыпеге, как в приведенном ниже примере. // Использовать несколько операторов ньесе.

из1по Зузиепц // у класса Оеп имеются два параметра типа, и на оба // накладываются ограничения с помощью отдельных // операторов ыЬесе. с1азз Оеп<Т, у> нЬесе Т: с1азз ноете у к зпсисС ( Т опгк У оня) риЬ11с оеп(т С, у ч) ( оЬ1 = С) оЬ2 = ч/ ) с1азз Ми1СТр1есопзисаьпСОеюо ( зсасьс чоьо магп() ( // Эта строка кода вполне допустима, поскольку // зксьпд — это ссылочньв< тип, а 1пС вЂ” тип значения. Сеп<зкгспо, Тпп> оп) = пеы Оеп<зпс1пс, 1пС>("тест", 11)) // А следующая строка кода недопустима, поскольку // Ьоо1 не относится к ссыпочному типу. // оеп<ьоо1, 1пс> оьз = пен оеп<ьоо1, ьпс>(ссие, 11)к ) ) В данном примере класс пеп принимает два аргумента с ограничениями, накладываемыми с помощью отдельных операторов нпеге.

Обратите особое внимание на объявление етого класса: с1азз Оеп<т, у> ипесе Т: с1азз инесе у: зссисС ( Как видите, один оператор ыпеге отделяется от другого только пробелом. Другие знаки препинания между ними не нужны и даже недопустимы. Получение значения, присваиваемого параметру типа по умолчанию Как упоминалось выше, при написании обобщенного кода иногда важно провести различие между типами значений и ссылочными типами.

Такая потребность возникает, Гааза 18. Обобщения 5о/ в частности, в том случае, если переменной параметра типа должно быть присвоено значение по умолчанию. Для ссылочных типов значением по умолчанию является пи11, для неструктурных типов значений — О, а для структур типа в сгос с — объект соответствующей структуры с полями, установленными по умолчанию. В этой связи возникает вопрос: какое значение следует присваивать по умолчанию переменной параметра типа: пп11, О или нечто другое? Например, если в следующем объявлении класса тезтз с1авв Тевг<Т>,( Т оЬ); // ...

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

Ниже приведен короткий пример, демонстрирующий данную форму оператора с(егап1Ь. // Продемонстрировать форму оператора Петао1Г. овгз Бувсею; с1авв МуС1авв ( //... // Получить значение, присваиваемое параметру типа Т по умолчанию. с1авв Тевс<т> ( роЬ11с Т оЬО; роЬ11с Тевг() ( // Следующий оператор годится только для ссылочных типов. // оЬО = по11) // не годится // Следующий оператор годится только для типов значений. // оЬО = Ог // не годится // А этот оператор годится как для ссылочных типов, // так и для типов значений. оЬО = Сетап1Г(т); // Годится! ) 588 Часть (. Язык С» с1авв Оетао1СОещо ( ввавтс чотб Мвтп() ( // Сконструировать объект класса Тевв, используя ссмлочнмй тип. Тевв<МуС1авв> х = пен Тевв<Мус1авв> () 1 тт(х.оЬО == по11) Сопво1е.иктееЫпе("Переменная х.оьз имеет пустое значение <по11>.")~ // Сконструировать объект класса Тевв, используя // тип значения, Тевв<1пг> у = пен Тевв<тпв>()) ТЕ(у.оЬ» == 0) Сопво1е.иктвеЬтпе("Переменная у.оЬ) имеет значение О.") Вот к какому результату приводит выполнение этого кода: Переменная х.оь1 имеет пустое значение <по11>.

Переменная у.оЬО имеет значение О. Обобщенные структуры В языке С№ разрешается создавать обобщенные структуры..Синтаксис для них такой же, как и для обобщенных классов. В качестве примера ниже приведена программа, в которой создается обобщенная структура ху для хранения координат Х, У. // Продемонстрировать применение обобщенной структурм. нв1пч Буввепи // Эта структура является обобщенной. встосв ХУ<т> ( Т х; т у~ риЬ11с ХУ(Т а, Т Ь) ( х = а," у = Ь) ) рпЬ11с т Х ( дев ( кесцкп х; ) вев ( х = ча1ое; ) риЬ11с Т У ( Глава (8, Обобщения 689 чео ( геоигп у) яео ( у = иа1ие) ) ) с1аяя Бпгисотеяо ( яоао1с ио1б Иа1п() ( Ху<ьпс> ху = пен ХУ<ьпи>(10, 20); ху<боиЫе> ху2 = пен ху<боиЫе>(88.0, 99.0) Сопяо1е.

Хгьоеъьпе (ху.Х + ", " ь ху. У) ) Сопяо1е.иг1сеъьпе(ху2.Х т ", " + ху2.У) г При выполнении этой программы получается следующий результат: 10, 20 88, 99 Как и на обобщенные классы, на обобщенные структуры могут накладываться ограничения. Например, на аргументы типа в приведенном ниже варианте структуры ху накладывается ограничение типа значения. ятгиси Ху<т> нпеге т: яогисп ( // ... Создание обобщенного метода Как следует из приведенных выше примеров, в методах, объявляемых в обобщенных классах, может использоваться параметр типа из данного класса, а следовательно, такие методы автоматически становятся обобщенными по отношению к параметру типа. Но помимо этого имеется возможность объявить обобщенный метод со своими собственными параметрами типа и даже создать обобщенный метод, заключенный в необобщенном классе.

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

Тип файла
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 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
6458
Авторов
на СтудИзбе
304
Средний доход
с одного платного файла
Обучение Подробнее