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

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

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

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

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

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

Может также возникнуть вопрос: почему бы ни обеспечить максимальную гибкость, оставив класс негерметизированным, чтобы кто-нибудь в будущем мог выполнять наследование от негоу При хорошем дизайне это не допускается. Следует еще раз подчеркнуть: класс, предназначенный для того, чтобы служить базовым классом, должен быть спроектирован с учетом этого с самого начала. Если это не так, то весьма вероятно. что наследование от него производного класса будет сопряжено со многими сложностями. На заметку! Во многих случаях классы, предназначенные служить расширяемыми базовыми классами, находятся в библиотеках.

Создание библиотек — кропотливое дело, которому нужно посвятить много времени, обеспечивая максимальную применимость этих библиотек. Вдобавок, однажды опубликовав библиотеку, вы обречены сопровождать ее в течение длительного времени. Если вы планируете разрабатывать библиотеки, рекомендуется изучить книгу Кжиштова Цвалина (Кгкузг(о1 Саабпа) и Брэда Абрамса (Втаб АЬгагпз) Ргатеиог(г ()ез!дп Вабебпез: Сопкел болз, (б(отз, а об Рв бете 1ог йеизаб(е . ГЧЕТ Вага лез (Абб(эоп-У(еэ1е у Рго1еззюпа(, 2005 г ) '. Эта книга основана на внутренних руководствах, использованных командой разработчиков библиотеки базовых классов .НЕТ при разработке платформы. Абстрактные классы Абстрактные классы диаметрально противоположны классам зеа1еб. Иногда необходимо спроектировать класс, единственное назначение которого — служить базовым классом. Подобного рода классы помечаются ключевым словом аЬзкгасс. Ключевое слово аЬэггасг сообщает компилятору, что назначение данного класса— служить базовым, и потому создавать экземпляры этого класса не разрешено.

Вернемся к примеру Сеогкесг1сзьаре, приведенному ранее в этой главе: рсЬ1хс аьзтгасс с1азз сеотекггсапаре ( риЬ11с апзггасг чозп Оган О к ) рсЬ11с с1азз Сэгс1е: сеотесг1сэнаре ( ' Планируется к выходу. Разработка инфрасгпруктпуры проекгпирозанил: соелашеншк идиомы и шаблоны [ИД "Вильямс". 2010 г). Классы, структуры н обьекгы 87 рньагс очегггбе чего Оган() уу Выполнить каное-то рисование ) ) рпЬ11с с1азз Епсгуготпс ( эгэг1с чо1П Мэап() ( Сггс1е эпаре = пен Сггс1е П; УУ Это не будет работать! )/ СеоиегггсЯЬаре зьаре2 = пен Яеоиегггсэпаре О зпаре.бган(); ) ) Создавать объект СеотеггасЯЬаре сам по себе не имеет смысла, поэтому класс ЯеопесгьсБЬаре сделан абстрактным. Таким образом, если код в мати попытается создать экземпляр аеотеггьсЯЬаре, возникнет ошибка компиляции.

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

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

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

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

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

Вложенные классы по нескольким причинам предоставляют отличное решение такой проблемы. 88 Глава 4 Вложенные классы имеют доступ ко всем членам, видимым содержащему их классу, даже если эти члены являются приватными. Рассмотрим следующий код, который представляет контейнерный класс, включающий экземпляры СеовеСт1сБЬаре: иягпд Буягеа.Со11есигопв; риЬ1гс аЬвпгасС с1аяв беоаегг1сБЬаре ( риЫгс аЬвсгасс ио1с( Отак(); риЫгс с1авв Кесгапд1е : Беовепг1сБЬаре ( риЫгс оиетт1с(е иосс( Отав() ( Буяпев.Сопяо1е.иг1Се11пе( "Кесгапд1е.отав" ); ) риЬ1гс с1авв С1гс1е: Сеоаеяг1свпаре ( риЬ1гс оиетт1ое ио1с) Отав() ( Буягет.Сопяо1е.иггиеыпе( "Стгс1е.отак" ) ) риЬ1гс с1авя Огае1пд: 1ЕпиаегаЬ1е ( ртгеаге агтаустяг впарев; рг1иасе с1авв 1сетасог: 1епитетасот ( риЫгс 1Сегапог( Огае1пд с(гае1пд ) ( сквя.с)так1пд = бтаегпд) СЫя.ситтепС = -1; ) риЬ1гс ио1с( Кевеи () ( сиггепС = -11 ) риЬ1гс Ьоо1 Иоиенехи() ( ++сигтепС; 11( сигтепС < отав1пд.япарев.соипС ) ( гепитп стае) ) е1ве ( геситп уа1ве) ) ) риЪ1гс оЬ]ест Ситтепи ( дес ( гегитп с(гачспд.япарея( ситгепС ]; рт1иапе Огая1пд с(таа1пд; рг1иапе гпг сигтепг; )(вассы, структуры и обьекты 89 рпЬ11с Ргаи1пд() яьэрея = пеи Атгауьтяг О к ) рпЬ11с 1Еппветясог Оесвппветагот() ( тегигп пеи 1тета ог( СЬ1я ) рпвттс яо1о Аог(( Реоветг1сэпаре яьяре ) яьарея.Аг(о( яьаре ); ) ) рпЬ1тс с1аяя Епсгуготпт яяэс1с яо1о Мата () Аесяапд1е гестапд1е = пеи Аестапд1я О к С1гс1е с1гс1е = пеи Сттс1е () 1 Ртаигпд Огаи1пд = пеи Ртаи1пд()~ Огаи1пд.лс(о( гестапд1е отяи1пд.хпо( сттс1е ); готеасЬ( аеоветт1сяьяре яьаре тп с(гаи1пд ) ( яьаре.огзи()) ) В этом примере демонстрируется ряд новых концепций, в том числе интерфейсы 1ЕппвегаЬ1е и 1Еппветакот, которые детально рассматриваются в главе 9.

Давайте в первую очередь сосредоточим внимание на использовании вложенного класса. В коде видно, что класс Ргаигпд поддерживает метод РеСЕппветакот, являющийся частью реализации 1ЕппвегаЬ1е. Он создает и возвращает экземпляр вложенного класса 1кегаког.

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