Главная » Просмотр файлов » Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)

Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865), страница 19

Файл №1160865 Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (Нэш Трей - C# 2010. Ускоренный курс для профессионалов (2010)) 19 страницаНэш Трей - C# 2010. Ускоренный курс для профессионалов (2010) (1160865) страница 192019-09-19СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

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

Также обратите внимание на специальное значение по имени ча1пе, которое доступно коду внутри этого блока, и которое имеет тот же тип, что объявлен в качестве типа свойства. При записи значения в свойство переменная чз1пе устанавливается в значение или ссылку на объект, которую клиент пытается присвоить свойству. Если вы попробуете объявить локальную переменную по имени ча1пе в блоке зес, то получите ошибку компиляции.

Средство доступа зег подобно методу, который принимает один параметр того же типа, что у свойства, и возвращает чсзб. Свойства, доступные только для чтения и только для записи Если свойство определяется только со средством доступа дек, то такое свойство будет доступно только для чтения. Аналогично если свойство определяется только со средством доступа зег. то получается свойство, доступное только для записи. И, наконец. свойство, имеющее оба средства доступа, допускает как чтение, так и запись.

Может возникнуть вопрос: чем свойство, доступное только для чтения, лучше обычного общедоступного полн с модификатором геаооп1у? На первый взгляд может показаться, что доступное только для чтения свойство менее эффективно доступного только для чтения общедоступного поля. Однако, учитывая тот факт, что во время ЛТ- компиляции СЬВ может встраивать код для доступа к свойству в случае, когда свойство просто возвращает поле, проблема неэффективности отпадает. После этого может показаться, что запись кода не будет особенно эффективной. Однако поскольку программисты не так уж ленивы, а автореализуемые свойства существенно облегчают задачу записи, данный аргумент также не слишком убедителен.

Фактически в 9УУо случаев свойство, доступное только для записи, является более гибким, чем общедоступное геабоп1у-поле. Одна из причин связана с возможностью отложить вычисление свойства, доступного только для чтения, до того момента, когда 70 Глава 4 оно понадобится (прием, известный как "ленивое" вычисление или опыоженное зылолнение). В действительности это может привести к более эффективному коду, когда свойство предназначено для представления чего-то такого, на вычисление чего требуется существенное время. Если для этой цели используется общедоступное геас(оо1у-поле, то придется выполнить вычисление в блоке конструктора. Все необходимые для вычисления свойства к этому моменту могут быть еще не готовы.

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

Например, предположим, что требуется обеспечить некоторое протоколирование в отладочной сборке при каждом обращении к свойству. Для доступа к данным клиент сможет неявно вызвать один из специальных методов свойств. Вгбкость, которой можно достичь подобным образом, практически не ограничена. С другой стороны, при обращении к значению, представленному в общедоступном геаг)оо1у-поле, никакой метод не вызывается, поэтому реализовать дополнительные действия можно, только перейдя от поля к свойству и перекомпилирован код. Эта дискуссия подводит непосредственно к обсуждению инкапсуляции в разделе Инкапсулщия" далее в главе. Автореалиауемые свойства Очень часто возникает потребность в некотором типе (скажем, классе), который бы содержал несколько полей, объединенных в единую сущность. Например, представим тип Евр1оуее, содержащий полное имя и идентификационный номер, но для примера манипулирующий этими данными в виде строк, как показано ниже: ряЬ11с с1яяя Евр1оуее ( ясг1пд Ьэ11Кяве; ясггяд 1ГН ) В том виде, как он написан, данный класс, по сути.

бесполезен. Его два поля являются приватными, и к ним необходимо как-то открыть доступ. Чтобы сохранить инкапсуляцию, нельзя просто сделать эти поля общедоступными. Тем не менее, для такого небольшого типа было бы утомительно кодировать свойства следующим образом: ряЬ11с с1яяя Евр1оуее ( риЬ11с ясггяд Ги11иаве ( дес ( гесигя Го11кяве1 ) яет ( Го11кяве = чя1ие; ) ров11с ясггпд 1г( ( дег ( гесэгя 1о; ) яес ( 1б = ча1ие; ) ясггод Га11каве; ясг1яд гбп ) И весь этот объем кода служит лишь для построения типа с парой свойств! Классы, структуры и объекты 71 На заметку! Очень многие разработчики во вспомогательных типах подобного рода просто избегают свойств и используют общедоступные поля, причем только из-за нежелания набирать длинный код. Проблема такого упрощенного подхода связана с невозможностью выполнения проверки достоверности при установке значений полей или проведения каких-либо отложенных вычислений при обращении к полям, если в этом возникнет необходимость по мере развития приложения.

К счастью, в С№ З.О добавлено новое средство под названием авгпореализуемые сзойспжа (анко-)шр)ешептеб ргорегС(ез), которое позволяет существенно сократить эту утомительную работу. Посмотрим, как изменится приведенный выше тип Епр1оуее за счет использования автореализуемых свойств; рсЬ11с с1азз Еар1оуее ( Ривгкс згг1пр Гц11кзае ( оеСГ ЗЕС; ) рцЬ11с зггкпс 1о ( сеС! веСу ) ) И зто все) На самом деле вы сообщаете компилятору вот что: "Мне нужно строковое свойство Гц11наае с поддержкой для него средств доступа сес и зес".

"За кулисами" компилятор генерирует в классе приватное поле для хранения значения и реализует средства доступа к нему. Изящество решения заключается в том, что здесь требуется не намного больше ручного ввода кода, чем для объявления простых общедоступных полей, но в то же время, поскольку речь идет о свойствах, можно изменять лежащую в их основе реализацию, не модифицируя общедоступный контракт для данного типа. То есть, если позднее понадобится каким-то образом настроить средство доступа к 1с(, то это можно будет сделать без перекомпиляции кода клиентов Евр1оуее. На заметку! Если вас интересует приватное поле, которое компилятор объявляет в типе для автореализуемых свойств, его всегда можете просмотреть с помощью )КОАВМ.

В текущей реализации приватное поле, хранящее значение свойства ГС11нзае класса еар1оуее, называется <>к Ассовасгсз11усепегзсеозгорегсуг1е1со и имеет тип зсг1лч, Обратите внимание, что имя поля является "синтаксически недопустимым", т.е. его не удастся явно указать в коде, не получив сообщение о синтаксической ошибке. Разработчики компилятора С№ сделали это для того, чтобы никто не мог использовать имя этого поля напрямую. В конце концов, имя этого поля — деталь реализации компилятора, которая может измениться в будущем. Можно также создать автореализуемое свойство. доступное только для чтения.

вставив ключевое слово ргк.эссе, как показано ниже: рск11с с1ззз Епр1оуее ( риЬ11с згггпд Гс11паае ( сегг рг1тгаее зеС; ) рсЬ11с зСгапд 1а ( Сег; зеС; ) Здесь может возникнуть вопрос: как тогда вообще устанавливать значение поля Ги11кзае? Получается.что это приватное поле, доступное только для чтения и представляющее внутреннее хранилище, имеет сгенерированное компилятором имя, которое нельзя использовать в конструкторе для присваивания полю значения. Решение заключается в применении обычного конструктора или фабричного метода.

В следующем примере демонстрируется использование обычного конструктора экземпляра: 72 Глава 4 сз1ло Еузсепо рсЬ11с с1азз Евр1оуее ( рсьуас Евр1оуее ( згг1сс Го11кззе, эгг1ос Ьб ) ( ЕЬ11кате = Гс11каве> 1о = Ес(; ) рсЬ11с згг1сс Еа11кате ( пес~ рг1гасе зесв риЬ11с зсг1сд 1г( ( дег1 эегв ) рсЬ11с с1азз Лссоргорз ( згас1с чо1о Маал() ( Евр1оуее етр = сев Еяр1оуее( ",)оьс Ьое", "111-11-1111") 1 Инкапсуляция Инкапсуляцию можно считать одной из наиболее важных концепций объектноориентированного программирования.

Инкапсуляция — это дисциплина тщательного контроля доступа к внутренним данным и процедурам объектов. Ни один язык, не поддерживающий инкапсуляцию. не может претендовать на звание объектноориентированного. Всегда необходимо стараться следовать базовой концепции: никогда не определять поля данных объектов с открытым доступом. Зто довольно просто.

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

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

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

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

Нэш Трей - C# 2010
Accelerated_C_2010-4565
3_syntax_overview
3_generics_1.cs
as_1.cs
boxing.cs
conversions_1.cs
implicit_type_1.cs
is_1.cs
references_1.cs
references_2.cs
references_3.cs
values_1.cs
4_classes_structs
4_abstract_classes_1.cs
4_beforefieldinit_1.cs
4_box_1.cs
4_box_2.cs
4_box_3.cs
4_box_4.cs
4_box_5.cs
4_class_definition_1.cs
4_compareto_1.cs
4_containment_example_1.cs
4_containment_example_2.cs
4_containment_example_3.cs
4_ctor_struct_1.cs
4_ctor_struct_2.cs
4_ctor_struct_3.cs
4_destructor_1.cs
4_destructor_2.cs
Свежие статьи
Популярно сейчас
Как Вы думаете, сколько людей до Вас делали точно такое же задание? 99% студентов выполняют точно такие же задания, как и их предшественники год назад. Найдите нужный учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7056
Авторов
на СтудИзбе
258
Средний доход
с одного платного файла
Обучение Подробнее