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

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

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

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

И во-вторых, индексатор должен быть членом своего класса и поэтому не может быть объявлен как зсас1с. Многомерные индексаторы Индексаторы можно создавать и для многомерных массивов. В качестве примера ниже приведен двумерный отказоустойчивый массив. Обратите особое внимание1на объявление индексатора в этом примере. // двумерный отказоустойчивый массив. цьйпд Зуьсеи) с1аьь та11вогтаггау20 ( Епв[,] ат // ссылка на базовый двумерный массив 1пт гонь, со1ьт // размеры массива рцЫ1с Епв Ьеповю // открытая переменная длины массива рцЫ1с Ьоо1 Еггр1ачт // обозначает результат последней операции // Построить массив заданных размеров. рцЬ11с Га11зогвйггау20(ьпв г, Епв с) ( гонь - ю со1ь = ст а = пен 1пг /гонь, со1ь]т Ьепдсп = гонь * со1ьт ) // это индексатор для класса га11$оегъггау20.

риЫЕс Епв СЫь[1пв Епбех1, Епв Епбех2] ( // Это аксессор чев. оеС ( 1Е(ок(1пбех1, Епбех2)) ( Еггг1ад = Еа1ье) гегцгп а[гпбех1, Епбех2]т ) е1ье ( Еггу1ад = Стает гегцгп От ) ) // Это аксессор ьею ьес ( ЕЕ(он(1пбех1, гпбех2)) ( 296 Часть!. Язык С№ а(апбех1, ьпбех2] = ча1це; ЕггГ1ад = Га1ве( е1зе ЕггГ1ад Сгце( // Возвратить логическое значение Сгце, если // индексы находятся в установленных пределах. рггчаее Ьоо1 оа(апе бпбех1, 1пг 1пбех2) ( 1№(1пбех1 >= 0 а 1пбех1 < гонз я ьпбех2 >= 0 я 1пбех2 < со1я) гегчгп сгце; гесцгп Га1яе( ) // Продемонстрировать применение двумерного индексатора. с1авя Тно01пбехегпешо ( вгагас чо№б Ма1п() ( Га11бо№ЕАггау20 Гз = пен Га11аоГСАггау20(3, 5); апс х; // Выявить скрытые сбои. Сопяо1е.игагеЬ№пе("Скрытый сбой."): бог(бпс 1=0; 1 < б; 1+я) Гв[1 1] = 1*10; бог(1пг 1=0; 1 < б; 1++) ( х = йз[1 1] ' г№(х != -1) Сопяо1е.игаге(х + " "); Сопзо1е.иг1ге11пе(); // А теперь показать сбои.

Сопзо1е.нг1сеь1пе("1пСбой с уведомлением об ошибках."); бог(апс 1=Ос 1 < б( 1++) ( Гя[1,1] = 1*10; 1№(бз.кггГ1ад) сопзо1е.иг1сеп1пе(5№з[" + 1 + ", " + 1 + "] вне границ"); ) бог(1пс 1=0; 1 < бя 1++) ( х = ха[1~1); 11 (! Гз. ЕггГ1ад) Сопво1е. Иг1ге (х + " "); е1яе Сопяо1е.нг1геЬ\пе(5№в[" + ]. ь ", " + 1 + ") вне границ"); ) ) Вот к какому результату приводит выполнение этого кода: Глава (О.

[(ндвксвторя н свойства 299 Скрытый сбой. 0 10 20 0 0 0 Сбой с уведомлением об ошибках. та[3, 3) вне границ Гв(4, 4) вне границ Гв(5, 5) вне границ 0 10 20 Гв[3, 3) вне границ Г та[4, 4) вне границ та[5, 5( вне границ Свойства Еще одной разновидностью члена класса является свойство. Как правило, свойство сочетает в себе поле с методами доступа к нему.

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

Аксессоры служат для получения и установки значения переменной. Главное преимущество свойства заключается в том, что его имя может быть использовано в выражениях и операторах присваивания аналогично имени обычной переменной, но в действительности при обращении к свойству по имени автоматически вызываются его аксессоры цет и зеп Аналогичным образом используются аксессоры пес и зес иидексатора. Ниже приведена общая форма свойства. тип имя( пес( // код аксессора для чтения ив поля ) аес( // код аксессора для записи в поле где тип обозначает конкретный тип свойства, например 1пс, а имя — присваиваемое свойству имя.

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

(Исключение из этого правила составляет автоматически реализуемое свойство, внедренное в версии С№ 3.0 и рассматриваемое далее.) Ниже приведен простой пример программы, в которой определяется свойство Мургор, предназначенное для доступа к полю рхор. В данном примере свойство допускает присваивание только положительных значений. 300 Часть (. язык С» // Простой пример применения свойства. цягпд эуягещ; с1аяя 51врРгор ( 1пг ргорг // поле, управляемое свойством Мургор рцв11с 51щрргор() ( ргор = 0; ) /* Это свойство обеспечивает доступ к закрытой переменной экземпляра ргор. Оно допускает присваивание только положительных значений.

*/ рцг11с 1пс Мургор ( дес ( гегцгп ргор) ) яег ( 11(ча1це >= 0) ргор = ча1це) ) ) // Продемонстрировать применение свойства. с1аяя Ргорегсупещо ( ягаг1с чогг( Магп() ( 51врРгор оЬ = пен 51щрРгор М ) сопяо1е.иг1сеьгпе("первоначальное значение оь.мургор: " + оь.мургор)г оЬ.Мургор = 100т // присвоить значение сопяо1е.иггсеьгпе("текущее значение оь.муРгор: " + оь.мургор)г // Переменной ргор нельзя присвоить // отрицательное значение.

Сопяо1е.игьгевгпе("Попытка присвоить значение " + "-10 свойству оЬ.Мургор")г оЬ.МуРгор = -10т Сопяо1е.игггепгпе("Текущее значение оЬ.МуРгор: " + оЬ.МуРгор)т ) ) Вот к какому результату приводит выполнение этого кода; Первоначальное значение оЬ.Мургор: 0 Текущее значение оЬ.Мургор: 100 Попытка присвоить значение -10 свойству оЬ.Мургор Текущее значение оЬ.Мургор: 100 Рассмотрим приведенный выше код более подробно. В этом коде определяется одно закрытое поле ргор и свойство Мургор, управляющее доступом к полю ргор. Как пояснялось выше, само свойство не определяет место в памяти для хранрния поля, а только управляет доступом к полю.

Кроме того, поле ргср является закрытым, а значит, оно доступно только через свойство Мургор. Гвавв ВЬ йндвксаторы и свойства 301 Свойство Мургор указано как рцЬ11с, а следовательно, оно доступно из кода за пределами его класса. И в этом есть своя логика, поскольку данное свойство обеспечивает доступ к полю ргор, которое является закрытым. Аксессор пег этого свойства просто возвращает значение из поля ргор, тогда как аксессор зег устанавливает значение в поле ргор в том и только в том случае, если значение оказывается положительным. Таким образом, свойство мургор контролирует значения, которые могут храниться в поле ргор.

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

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

// Добавить свойство Ьепясь в класс Га115оГСАггау. цейлон Яузкеит с1азз Га115оГСАггау ( 1пс(! ат // ссылка на базовый массив 1пг 1его // длина массива — служит основанием для свойства Ьепдгь рцЫЬс Ьоо1 ЕггГ1адт // обозначает результат последней операции // Построить массив заданного размера.

рцЫ1с Га115отглггау(ьпг згге) ( а пен ьпг(з1ге)т 1еп = з1гет // Свойство Ьепокь только для чтения. рцЫ1с 1пг Ьепдгь ( дев ( гегцгп 1епт ) // Это индексатор для класса Га11Яовсаггау. рцЫгс ьпк СЫв(впк ьпбех) ( // Это аксессор Чес. чек ( 1Г(ох(1пбех)) ( 302 Часть ]. Язык С№ ЕггГ1ае = та1зет гесцгп а[1пбех]т ) е1зе ( Еггг1ад = Сгце; гегцгп От ) // Это аксессор зег. зес ( тт(оа(тпбех)) ( а[ьпбех] = ча1цет ЕггГ1ае = Га1зет ) е1зе ЕггГ1ад Сгцет ) ) // Возвратить логическое значение Сгце, если // индекс находится з установленных границах.

ргьчасе Ьоо1 ог(ьпг 1пт(ех) ( 1№(апбех >= 0 а ьпбех < ьепесь) гегцгп сгцет гегцгп та1зет ) ) // Продемонстрировать применение усовершенствованного // отказоустойчивого массива. с1азз тшргочебгзсешо [ згааьс чоаб Магд() Га113отгаггау гз = пен Га[1эотгаггау(5)т 1пг хт // Разрешить чтение свойства Ьепегь.

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