Главная » Просмотр файлов » Учебное пособие

Учебное пособие (1077022), страница 8

Файл №1077022 Учебное пособие (Самохвалов Э.Н., Ревунков Г.И., Гапанюк Ю.Е. - Введение в проектирование и разработку Интернет-приложений) 8 страницаУчебное пособие (1077022) страница 82018-01-10СтудИзба
Просмтор этого файла доступен только зарегистрированным пользователям. Но у нас супер быстрая регистрация: достаточно только электронной почты!

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

Для обозначения наследования используется символ двоеточия приобъявлении класса, а затем указывается имя базового класса «classExtendedClass1 : BaseClass».4.2.1 Вызов конструкторов из конструкторовПри наследовании может возникнуть проблема, связанная с доступомк private полям базового класса, и в первую очередь она может появиться вконструкторе. Наследуемый класс имеет доступ к protected полям базовогокласса, но не имеет доступа к private полям. Инициализация private полейможет быть реализована с помощью вызова конструктора базового класса:public ExtendedClass1(int pi, int pi2) : base(pi){i2 = pi2;}Ключевое слово base обозначает вызов конструктора базового класса.В качестве параметров в круглых скобках указываются параметры,59передаваемые в конструктор базового класса.

После вызова конструкторабазовогокласса(инициализацияprivateполейбазовогокласса)выполняются действия указанные в фигурных скобках в теле текущегоконструктора.Аналогично может быть вызван другой конструктор текущего класса,но в этом случае вместо ключевого слова base используется ключевоеслово this.Пример использования ключевого слова this:public ExtendedClass1(int pi, int pi2, int pi3) : this(pi, pi2){i3 = pi3;}В этом случае посредством ключевого слова this вызываетсярассмотренный ранее конструктор класса с двумя параметрами «publicExtendedClass1(int pi, int pi2)», затем выполняются действия указанные вфигурных скобках в теле текущего конструктора.4.2.2 Виртуальные методыПример переопределения виртуального метода ToString:public override string ToString(){return "i=" + MethodReturn("1")+ " i2=" + i2.ToString() + " i3=" + i3.ToString();}Метод ToString объявлен в классе Object, который является базовым виерархии классов C#.Подход к виртуальным методам в языках Java и C# существенноразличается.В Java все нестатические метода класса – виртуальные.

Разработчикиязыка C# полагают, что это приводит к снижению производительности, таккак адрес для выполнения виртуального метода должен динамическивычисляться на этапе выполнения.60Поэтому в языке C# виртуальные методы должны быть явнообъявлены с помощью ключевых слов virtual или abstract (абстрактныеметоды – аналог чистых виртуальных методов в С++). Детали объявленияабстрактных методов будут рассмотрены ниже.Для переопределения виртуального метода необходимо использоватьключевое слово override.

Очевидно, что его применение избыточно, ведькомпилятор и так «знает» что в базовом классе объявлен виртуальныйметод с таким именем.Здесь, как и в случае передачи параметров ref и out используетсясинтаксис языка C#, «дисциплинирующий» разработчика. Разработчикдолжен явно указать, что он «понимает» что реализует данный метод каквиртуальный.Еслипропуститьобъявление ключевогослова«override»,токомпилятор выдает не ошибку, а предупреждение, приведенное на рис 8.Рис.

8. Предупреждение в случае отсутствия ключевого слова «override».Текст предупреждения: «"Classes.ExtendedClass1.ToString()" скрываетнаследуемый член "object.ToString()". Чтобы текущий член переопределялэту реализацию, добавьте ключевое слово override. В противном случаедобавьте ключевое слово new.».Таким образом, компилятор требует, чтобы программист явно указалключевое слово override, если он считает, что данный метод следуетиспользовать как виртуальный. Если программист хочет показать что61данный метод не должен применяться как виртуальный, но имеет имя,совпадающее с именем виртуального метода, то он должен указатьключевое слово new.Принято считать, что при использовании ключевого слова newпроисходит «сокрытие» виртуального метода.

В этом случае код будетвыглядеть так:public new string ToString(){return "i=" + MethodReturn("1")+ " i2=" + i2.ToString() + " i3=" + i3.ToString();}В теле метода формируется текстовая строка, которая возвращается спомощью оператора return.

Для конкатенации фрагментов строкииспользуетсястроковоеоператорзначение,«i2.ToString()»«+».МетодунаследованвозвращаетизстроковоеMethodReturn,базовоговозвращающийкласса.представлениеВыражениецелочисленнойпеременной i2.4.3 Абстрактные классы и методыВ языке C# как и в языках С++ и Java можно объявлять абстрактныеклассы.Следует напомнить, что абстрактным считается класс, которыйсодержит хотя бы один виртуальный метод без реализации, такой методдолжен быть переопределен в наследуемом классе.

Абстрактные классыиспользуются в цепочке наследования, но создавать объекты абстрактныхклассов нельзя.В языке С++ абстрактным считается класс, содержащий хотя бы однучистую виртуальную функцию. Это такая функция, которой присваиваетсязначение 0, пример: «virtual void Function1() = 0;». Никаких специальныхобъявлений на уровне класса при этом не делается.62В языках Java и в C# чистые виртуальные методы называютсяабстрактными, перед их объявлением указывается ключевое слово abstract.Если хотя бы один из методов объявлен абстрактным, то весь классдолжен быть объявлен как абстрактный, поэтому ключевое слово abstractтакже должно быть указано при объявлении класса.Пример класса геометрической фигуры:/// <summary>/// Класс геометрической фигуры/// </summary>abstract class Figure{/// <summary>/// Тип фигуры/// </summary>public string Type { get; set; }/// <summary>/// Вычисление площади/// </summary>public abstract double Area();/// <summary>/// Приведение к строке, переопределение метода Object/// </summary>public override string ToString(){return this.Type + " площадью " + this.Area().ToString();}}Класс содержит абстрактный метод вычисления площади:public abstract double Area();Объявление метода как абстрактного автоматически делает еговиртуальным, поэтому в наследуемом классе абстрактный метод долженпереопределяться с ключевым словом override.Поскольку класс Figure содержит хотя бы один абстрактный метод, товесь класс также объявлен как абстрактный.В случае наследования от абстрактных классов Visual Studioпозволяет автоматически генерировать заглушки для абстрактных методов.Создадим класс прямоугольник, наследуемый от фигуры.

В этом случае63при нажатии правой кнопки мыши на имени базового класса вконтекстномменюпоявляетсяпунктавтоматическойреализацииабстрактного класса (рис 9).Если выбрать данный пункт меню, то будет сгенерирован следующийкод:class Rectangle2 : Figure{public override double Area(){throw new NotImplementedException();}}В наследуемый класс добавлена «заглушка» метода. Метод правильнообъявлен,новместореализациигенерируетсяNotImplementedException.Рис. 9.

Реализация абстрактного класса.исключение644.4 ИнтерфейсыАбстрактный класс может содержать как абстрактные, так и обычныеметоды. Обычные методы содержат реализацию в виде кода языка C# имогут быть вызваны в наследуемом классе.Интерфейс является «предельным случаем» абстрактного класса и несодержит реализации.Интерфейс может содержать только объявления методов и свойств безуказания области видимости.В языке C# допустимо наследование от нескольких интерфейсов, нотолько от одного класса.Наследование от нескольких классов может порождать ряд проблем,из которых наиболее известной является проблема «ромбовидногонаследования».Нарис10приведенадиаграмманаследования,представляющая собой ромб. В этом случае классы B и C наследуются откласса А.

Класс D наследуется от классов B и C.Class AClass BClass CClass DРис. 10. Пример ромбовидного наследования.При этом возникает вопрос о том, что делать с полями класса А. Онидублируются при наследовании в классах B и C и могут изменятьсяразличным образом. Класс D может получить доступ к полям класса А, но65к какой же копии полей при этом он получит доступ – к копии класса Bили класса C?Чтобы избежать подобных проблем в языках Java и C# используетсянаследование только от одного класса. Почему же при этом возможнонаследование от нескольких интерфейсов?Наследование от интерфейсов отличается от наследования классов.При наследовании классов класс-наследник получает все реализованныеметоды от базового класса.

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

В этом случае они рассматриваются непросто как средство нижнего уровня для устранения ромбовидногонаследования, но как высокоуровневое средство, позволяющее независимопроектироватьсистемынавзаимодействияотдельныеподсистемы.подсистемы,междуаПроизводитсяинтерфейсыразличнымиопределяютподсистемами,проектирование подсистем может проводиться независимо.Пример объявления интерфейса:interface I1{string I1_method();}декомпозицияконтрактыпослечего66В интерфейсе I1 объявлен метод I1_method, который не принимаетпараметров и возвращает строковое значение.Данный метод можно рассматривать как аналог абстрактного метода.Область видимости методов в интерфейсе не указывается, онаопределяется в наследуемом классе, реализующем методы.Имена интерфейсов в языке C# принято начинать с большойлатинской буквы I (сокращение от Interface), что позволяет в цепочкенаследования отличать имена интерфейсов от имен классов.Интерфейсы могут наследоваться от интерфейсов.Пример наследования интерфейса от интерфейса:interface I2 : I1{string I2_method();}В этом случае интерфейс I2 содержит объявление метода I2_method атакже объявление метода I1_method, унаследованного от интерфейса I1.4.5 Наследование классов от интерфейсовРассмотрим пример класса, который наследуется как от класса, так иот интерфейсов.class ExtendedClass2 : ExtendedClass1, I1, I2{//В конструкторе вызывается конструктор базового классаpublic ExtendedClass2(int pi, int pi2, int pi3): base(pi, pi2, pi3) {}//Реализация методов, объявленных в интерфейсахpublic string I1_method() { return ToString(); }public string I2_method() { return ToString(); }}В языке C# по аналогии с языком С++ для наследования как отклассов так и от интерфейсов используется двоеточие.

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

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

Самохвалов Э.Н., Ревунков Г.И., Гапанюк Ю.Е
примеры
01
Structures
Structures
v15
.suo
Structures
Properties
AssemblyInfo.cs
bin
Debug
Structures.exe
Structures.exe.config
Structures.pdb
obj
Debug
TempPE
CoreCompileInputs.cache
DesignTimeResolveAssemblyReferencesInput.cache
Structures.csprojResolveAssemblyReference.cache
Structures.exe
Structures.pdb
TemporaryGeneratedFile_036C0B5B-1481-4323-8D20-8F5ADCB23D92.cs
TemporaryGeneratedFile_5937a670-0e60-4077-877b-f7221da3dda1.cs
TemporaryGeneratedFile_E7A71F73-0F8D-4B9B-B56E-8E70B10BC5D3.cs
App.config
Program.cs
Structures.csproj
Свежие статьи
Популярно сейчас
Зачем заказывать выполнение своего задания, если оно уже было выполнено много много раз? Его можно просто купить или даже скачать бесплатно на СтудИзбе. Найдите нужный учебный материал у нас!
Ответы на популярные вопросы
Да! Наши авторы собирают и выкладывают те работы, которые сдаются в Вашем учебном заведении ежегодно и уже проверены преподавателями.
Да! У нас любой человек может выложить любую учебную работу и зарабатывать на её продажах! Но каждый учебный материал публикуется только после тщательной проверки администрацией.
Вернём деньги! А если быть более точными, то автору даётся немного времени на исправление, а если не исправит или выйдет время, то вернём деньги в полном объёме!
Да! На равне с готовыми студенческими работами у нас продаются услуги. Цены на услуги видны сразу, то есть Вам нужно только указать параметры и сразу можно оплачивать.
Отзывы студентов
Ставлю 10/10
Все нравится, очень удобный сайт, помогает в учебе. Кроме этого, можно заработать самому, выставляя готовые учебные материалы на продажу здесь. Рейтинги и отзывы на преподавателей очень помогают сориентироваться в начале нового семестра. Спасибо за такую функцию. Ставлю максимальную оценку.
Лучшая платформа для успешной сдачи сессии
Познакомился со СтудИзбой благодаря своему другу, очень нравится интерфейс, количество доступных файлов, цена, в общем, все прекрасно. Даже сам продаю какие-то свои работы.
Студизба ван лав ❤
Очень офигенный сайт для студентов. Много полезных учебных материалов. Пользуюсь студизбой с октября 2021 года. Серьёзных нареканий нет. Хотелось бы, что бы ввели подписочную модель и сделали материалы дешевле 300 рублей в рамках подписки бесплатными.
Отличный сайт
Лично меня всё устраивает - и покупка, и продажа; и цены, и возможность предпросмотра куска файла, и обилие бесплатных файлов (в подборках по авторам, читай, ВУЗам и факультетам). Есть определённые баги, но всё решаемо, да и администраторы реагируют в течение суток.
Маленький отзыв о большом помощнике!
Студизба спасает в те моменты, когда сроки горят, а работ накопилось достаточно. Довольно удобный сайт с простой навигацией и огромным количеством материалов.
Студ. Изба как крупнейший сборник работ для студентов
Тут дофига бывает всего полезного. Печально, что бывают предметы по которым даже одного бесплатного решения нет, но это скорее вопрос к студентам. В остальном всё здорово.
Спасательный островок
Если уже не успеваешь разобраться или застрял на каком-то задание поможет тебе быстро и недорого решить твою проблему.
Всё и так отлично
Всё очень удобно. Особенно круто, что есть система бонусов и можно выводить остатки денег. Очень много качественных бесплатных файлов.
Отзыв о системе "Студизба"
Отличная платформа для распространения работ, востребованных студентами. Хорошо налаженная и качественная работа сайта, огромная база заданий и аудитория.
Отличный помощник
Отличный сайт с кучей полезных файлов, позволяющий найти много методичек / учебников / отзывов о вузах и преподователях.
Отлично помогает студентам в любой момент для решения трудных и незамедлительных задач
Хотелось бы больше конкретной информации о преподавателях. А так в принципе хороший сайт, всегда им пользуюсь и ни разу не было желания прекратить. Хороший сайт для помощи студентам, удобный и приятный интерфейс. Из недостатков можно выделить только отсутствия небольшого количества файлов.
Спасибо за шикарный сайт
Великолепный сайт на котором студент за не большие деньги может найти помощь с дз, проектами курсовыми, лабораторными, а также узнать отзывы на преподавателей и бесплатно скачать пособия.
Популярные преподаватели
Добавляйте материалы
и зарабатывайте!
Продажи идут автоматически
7035
Авторов
на СтудИзбе
260
Средний доход
с одного платного файла
Обучение Подробнее