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

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

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

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

Теперь клиенты, использующие значение совр1ех[чивъет, могут писать код естественным образом, получая преимущества повышенной производительности. Клиенты, которым нужно работать через интерфейс, такие как некоторые необобщенные типы контейнеров, могут использовать интерфейс 1СовратаЬ1е,хотя и с упаковкой. Если интересно, откройте исполняемый файл кода предыдущего примера в!ЬРАБМ и исследуйте метод Ма1п. Вы увидите.

что первый вызов СовратеТо не приводит к излишней упаковке, в то время как второй вызов совратето сопряжен с двумя операциями упаковки, чего и следовало ожидать. В качестве основного эмпирического правила эту идиому можно применять почти ко всем методам типов значений, которые принимают или возвращают упакованный экземпляр типа значения. До сих пор было показано два случая применения этой идиомы: первый — при реализации Ес[иа1э для типа Совр1ехнивЬет и второй — при реализации 1СовратаЬ1е.СовратеТо.

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

Списки предназначены для обслуживания наиболее распространенных сценариев, которые часто возникают во время разработки программ на СЗ. Список вопросовдля ссылочныхтипов ° Должен ли данный класс допускатпь наследоэание2 Классы должны объявляться как эеа1еа' по умолчанию, если только они четко не предназначены для использования в качестве базовых. И даже тогда понадобится четко описать, как использовать их в таком качестве.

Отдавайте предпочтение герметизированным (эеа1ес[) классам перед не герметизированными. ° Яэляегпся ли объектп клонируемыму Реализуйпю 1С1 опеаЬ|е, если по умолчанию нужно глубокое копирование. Если объект является изменяемым, то он должен поддерживать глубокое копирование. Если же он не изменяемый, в качестве оптимизации можно реализовать поверхностное копирование. Избегайхпе использования мепюдамевЬетн[зеС1опе. Вызов МевЬетн[зес1опе создает новый объект без обращения к каким-либо конструкторам. Такая практика может оказаться небезопасной.

° Является ли объект одноразоэыму Реализуйпю 1ЬТ зрозгб[е. Если обнаруживается необходимость в реализации деструктора, используйте вместо этого интерфейс 101эрозаЬ1е. 474 Глава 13 Реализуйте финализапюр. В одноразовых объектах должен быть реализован финализатор, чтобы перехватывать объекты, для которых клиент забыл вызвать Осврове, либо предупреждать клиентов об этом. Не возлагайте обязанности детерминированной деструкции на деструктор СЗ, которым является финализатор. Выполняйте такую работу только в методе 01 врове. Подавляйте финализацию при вызове О1 грове. Это позволит сборщику мусора более эффективно делать свою работу.

В противном случае объекты будут задерживаться в куче дольше, чем необходимо. ° Должна ли зквизаленптность объектное иметь семантику значений7 Переопределяйте ОЬ1 есс. есгиа1в. Перед изменением семантического значения Ециа1в удостоверьтесь, что на то имеются серьезные основания, в противном случае оставьте эквивалентность идентичности по умолчанию. Внутри переопределений Ециа1в нельзя генерировать исключения. Знайтпе, где вызывать реализацию Еди а1 в базового класса. Если объект унаследован от типа, версия Ециа1в которого имеет семантический смысл, отличающийся от вашей реализации, не вызывайте в переопределении версию базового класса. В противном случае вюпочите ее результат в ваш.

Переопределяйте также и ОэснавЛсоде. Это — обязательный шаг, позволяющий гарантировать возможность использования типа в качестве ключа хеш-кода. Если переопределен метод Ес1иа1в, также следует переопределить и ОегнавЬСоде. ° Являются ли объекты зпюго типа сраанимымиу Реализуйте интерфейсы 1СотрагаЫе и 1СонрагаЬ1е<т> и переопределшпе мепюды Естиа1в и ОегуавЛСоде. Они должны быть переопределены в группе. поскольку их реализации взаимосвязаны. ° является ли объекта преобразуемым в с Евсея. 5сгйпд или обратноу Переопределяйте ОЬ1есС.

Тозгггпд. Реализация, унаследованная от ОЬ1эсС. Тозггспц, просто возвращает строковое имя типа объекта. Реализуйте 1Рогиа с саые, если необходим более пюнкий контпроль над форматированием спцюки. Реализуйте переопределение Оь1есг.. Тозсгспу вызовом 1еогвсас сгь1э . товс ссора с форматной строкой 6 и поставщиком формата пи11. т Является ли объекта преобразуемым7 Переопределяйте 1СоптегсТЫе, чпюбы класс Работал с ьувгеи.

сопссегс. В СЗ должны быть реализованы все методы интерфейса. В методах преобразования, которые не имеют смысла для класса. просто сгенерируйте иснлючение 1пча11дСавСЕхсергсоп. ° Должен ли обьект быть неизменяемым7 Рассмотрите возможностпь сделать поля доступными только для чтения и предоставить доступные только для чптения сеойстпва. Объекты, фундаментально представляющие простое значение, такие как строка или комплексное число, нвляются блестящими кандидатами на неизменяемые объекты.

° Нужно ли передавать объект как константный неизменяемый параметр мепюдау Рассмотрите возмолсность реализации неизменяемого промежупючного катсса, содержасцего ссылку на изменяемый объекта, который может передаваться в качеспюе параметпра мепюда. Первым делом, подумайте, имеет ли смысл Е поисках канонических форм С№ 475 для класса быть неизменяемым. Если да, то в этом действии иет необходимости. Если же изменяемые объекты нужно передавать в методы как неизменяемые, то такого же эффекта можно достичь с использованием интерфейсов.

Список вопросов для типов значений ° Нужна ли повышенная зффектпивность для пшпов значений7 Переопределите Едиа1з и СегиазЬСоде. Общая версия Ча1иетуре.Едиа1з неэффективна, поскольку в своей работе полагается иа рефлексию. В общем случае лучше предоставить безопасную к типам версию Едиа1э, реализуя 1едиасаЬ1е<т>, и затем заставить безтиповую версию вызывать ее. Не забудьте также переопределить СеСНазЬСоде. Предоставьтпе безоппсные к типам перегрузки для унаследованных безтиповых мегподов и методов интерфейса. Для любого метода, который принимает или возвращает параметр типа Яузгев. ОЬ1есг, предусмотрите перегрузку, использующую иа месте этого параметра конкретный тип значения. В таком случае клиенты типа значения смогут избежать ненужной упаковки.

Для интерфейсов при желании можно скрыть безтиповую реализацию с помощью явной реализации. ° Нужно ли модифицировать упакованные экземпляры значения7 Реализуйте интерфейс, чтобы делать зто. Вызов через член интерфейса, реализованного типом значения — единственный способ изменить экземпляр типа значения внутри упакованного экземпляра. ° Являются ли значения данного пшпа сравнимы.ии7 Реализуйте интерфейсы 1СоврагаЬ1е и 1СопрагаЬ1е<Т> и переопределите мепюды едиа1з и сесназьсоде. Оии должны быть переопределены все в группе, поскольку их реализации взаимосвязаны. В случае переопределения метода Едиа1з следует также предусмотреть безопасную к типам версию. ° Является ли значение преобразуемым в яуз с ее. я сгдпд или обратно7 Переопределяйте Уа1сеТуре.

ТоЯсгдпд. Реализация, унаследованная от Ча1иетуре, просто возвращает строковое имя типа значения. Реализуйте 1Рогва С СаЬ1е, если пользователю нужен более пюнкий контроль над форматированием строки. Реализуйте переопределение да1сетуре. тояггтпд вызовом 1еогпагсаъ1е.тоясгтпд с форматной строкой си поставщиком формата пи11. ° Является ли значение преоброзуемым7 Переопределите 1СопеегсТЬ1е, чтобы структуры работали с Яуэ Сев.

Сопиегг. В С№ должны быть реализованы все методы интерфейса. В методах преобразования, которые ие имеют смысла для структуры. просто сгеиерируйтеисключение 1пча11дсазСЕхсерк1оп. ° Должна ли данная струкгпура быть неизменяемой7 Рассмотрите возможность сделогпыюля доступными только для чтения и предоспювшпь доступные люлько для чпшния свойства. Значения являются блестящими каидкщатами иа то, чтобы быть неизменяемыми типами. глдвА 14 Расширяющие методы р асширяющие методы (ех(епв(оп ше(Ьобв) дополняют общедоступный интерфейс, нли контракт, типа. На первый взгляд они могут показаться способом расширения классов, которые для этого не предназначены. Однако очень важно отметить, что расширяющие методы не могут нарушать инкапсуляцию. Зто объясняется тем, что они на самом деле не являются методами экземпляра, а потому не могут разрушить оболочку инкапсуляции расширяемого типа.

Введение в расширяющие методы Как упоминалось ранее, расширяющие методы могут показаться средством изменения общедоступного интерфейса любого типа. Рассмотрим краткий пример расширяющих методов в действии: пвтпд Яувпеги пашеврасе ЕхтепвьопмеспобЭешо ( роЬ11с всас1с с1авв Ехсепв1опМеспобв роЬЬЬо впас1с тоти ЯепбтоЬоо( Гбьв Бог1пс) вгг ) ( Сопво1е.игтгеЬЬпе( вдг )! ) роЬ11с с1авв Ехоепвтопмеспоб1пгго ( всастс тотб Мвтп() ( Ягг1пч вгг = "Полезная длв протоколирования информация"; /У Вызов расширяющего метода. всг.вепбтоьоч О: УУ Вызов того же метода старым способом. Ехсепв1опиеддобв.зепбтоЬоо( втт ) Первым делом взгляните на метод Матс.

Обратите внимание, что сначала был объявлен Бувгеш. Бгг1псь а затем вызван метод Бепбтоьод на экземпляре вгг. Минуточку! В определении типа Бувпеш. Ятг1по нет метода по имени Яепбтоьоо. Дело в том, что метод Яепбтоьоо — это расширяющий метод. объявленный в приведенном выше классе по имени ЕхгепвтопМеСЬобв. 478 Глава 14 на первый взгляд ехсепз1опмесьосгз. яепггтоьод выглядит подобно обычному статическому методу. Однако обратите внимание на две вещи. Он объявлен внутри статического класса по имени Ехгепз1опнеглогтз, а тип первого параметра статического метода яепптоьод предварен ключевым словом сгт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
Свежие статьи
Популярно сейчас
Почему делать на заказ в разы дороже, чем купить готовую учебную работу на СтудИзбе? Наши учебные работы продаются каждый год, тогда как большинство заказов выполняются с нуля. Найдите подходящий учебный материал на СтудИзбе!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7057
Авторов
на СтудИзбе
258
Средний доход
с одного платного файла
Обучение Подробнее