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

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

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

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

Базовый класс иинтерфейсы перечисляются через запятую. В Java для наследования отклассов используется ключевое слово extends, а для наследования от67интерфейсов ключевое слово implements. Аналогичный код на Javaвыгляделбыследующимобразом«classExtendedClass2extendsExtendedClass1 implements I1, I2».Обратите внимание, что для объявления методов, унаследованных отинтерфейса,неиспользуетсяключевоесловоoverride.Методы,унаследованные от интерфейса, не виртуальные, они как бы собственныеметоды класса.Как и в случае наследования от абстрактных классов Visual Studioпозволяетавтоматическигенерироватьзаглушкидляметодовинтерфейсов.

Создадим класс ClassForI1, наследуемый от интерфейса I1. Вэтом случае при нажатии правой кнопки мыши на имени интерфейса вконтекстномменюпоявляетсяпунктавтоматическойреализацииинтерфейса (рис 11).Рис. 11. Реализация интерфейса.Отличие от абстрактного класса состоит в том, что в случаенаследования от интерфейса подменю содержит два пункта «реализоватьинтерфейс» и «реализовать интерфейс явно». В случае выбора обоих68пунктов будет сгенерирован следующий код, комментарий перед методомсоответствует пункту меню:class ClassForI1 : I1{// реализовать интерфейсpublic string I1_method(){throw new NotImplementedException();}// реализовать интерфейс явноstring I1.I1_method(){throw new NotImplementedException();}}Возникает вопрос, чем реализация интерфейса отличается от явнойреализации, когда вызывается каждый из методов?Можно сформулировать данный вопрос в виде практическогопримера.

Дана следующая реализация класса:class ClassForI1 : I1{// реализовать интерфейсpublic string I1_method(){return "1";}// явно реализовать интерфейсstring I1.I1_method(){return "2";}}Каким образом, используя данную реализацию, можно вывести вконсоль число «12»?Ответ на данный вопрос приведен в виде следующего фрагмента кода:ClassForI1 c1 = new ClassForI1();string str1 = c1.I1_method();I1 i1 = (I1)c1;string str2 = i1.I1_method();Console.WriteLine(str1 + str2);69Рассмотрим данный код более подробно:Сначала создается объект класса ClassForI1:ClassForI1 c1 = new ClassForI1();Черезобъектклассаc1вызываетсяметодI1_method,соответствующий пункту «реализовать интерфейс». Метод возвращает«1»:string str1 = c1.I1_method();Производится приведение переменной класса c1 к интерфейсномутипу I1, для того чтобы вызвать метод явной реализации интерфейса:I1 i1 = (I1)c1;Затем через объект интерфейсного типа i1 вызывается методI1.I1_method, соответствующий пункту «реализовать интерфейс явно».Метод возвращает «2»:string str2 = i1.I1_method();Таким образом, чтобы вызвать метод, соответствующий пункту«реализовать интерфейс явно», необходимо привести объект класса кинтерфейсному типу.4.6 Методы расширенияВ языке C# существует уникальный механизм, который позволяетдобавлять новые методы к уже реализованным классам, в том числеклассам стандартной библиотеки.

Сами разработчики .NET активно егоиспользуют, многие методы стандартных библиотек реализованы какметоды расширения.Причем методы стандартной библиотеки могут находиться в однойсборке (файле .dll), а методы расширения – в другой сборке. Важно чтобыони принадлежали к одному пространству имен.Предположим, что нужно расширить класс ExtendedClass2 новымметодом, однако по каким-либо причинам невозможно внести изменения висходный код класса.70Тогда можно создать метод расширения следующим образом:static class ExtendedClass2Extension{public static int ExtendedClass2NewMethod(this ExtendedClass2 ec2, int i){return i + 1;}}Данный класс является обычным классом, однако у него естьнекоторые особенности. Метод расширения должен быть объявлен встатическом классе и должен быть статическим методом. Первый параметрметода расширения – объект расширяемого класса, перед которымуказывается ключевое слово this.Если откомпилировать класс ExtendedClass2Extension, то IntelliSenseдля класса ExtendedClass2 будет работать так, как показано на рис.

12.Рис. 12. Работа IntelliSense для метода расширения.В этом случае метод расширения обозначен как обычный метод, но сдополнительной стрелкой, указывающей на то, что это метод расширения.Таким образом, разработчику «кажется», что у класса ExtendedClass2появился новый метод ExtendedClass2NewMethod, однако, данный методобъявлен в отдельном классе и возможно даже в отдельной сборке. Дляуспешной реализации метода расширения, пространства имен у базовогокласса и класса, содержащего метод расширения, должны совпадать.714.7 Частичные классыЕще один уникальный механизм, существующий в языке C#, этомеханизм частичных классов. Этот механизм позволяет объявить класс внескольких файлах.В языке C# этот механизм используется вместе со средствамиавтоматической генерации кода.

В Visual Studio существует много средств,которые автоматически генерируют код для обращения к базе данных(технология Entity Framework), для сетевого взаимодействия (технологияWCF) и другие.Если класс автоматически генерируется с помощью какого-либосредства, то он по умолчанию создается как частичный с помощьюключевого слова partial. Это позволяет создать другую «часть» данногокласса в отдельном файле и вручную дописать необходимые методы кавтоматически сгенерированному классу.Казалось бы что эта возможность есть в языке С++, ведь в немпредусмотрено разделение класса на заголовочный файл и реализацию.

Нов языке С++ невозможно разделить заголовочный файл на несколькофайлов. В Java это принципиально невозможно, поскольку действуетправило один класс – один файл. Поэтому когда в Java возникланеобходимость создания заглушек для сетевого взаимодействия, то дляэтого создали специальный шаблон проектирования из несколькихклассов.Пример объявления частичного класса. Файл «PartialClass1.cs»:usingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Text;namespace Classes{partial class PartialClass{int i1;72public PartialClass(int pi1, int pi2) { i1 = pi1; i2 = pi2;}public int MethodPart1(int i1, int i2){return i1 + i2;}}}Данная часть класса содержит закрытую переменную класса, методMethodPart1 и конструктор.Пример объявления частичного класса.

Файл «PartialClass2.cs»:usingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Text;namespace Classes{partial class PartialClass{int i2;public override string ToString(){return "Частичный класс. i1=" + i1.ToString()+ " i2=" + i2.ToString();}public string MethodPart2(string i1, string i2){return i1 + i2;}}}Данная часть класса содержит закрытую переменную класса, методMethodPart2 и переопределение виртуального метода ToString.Работа механизма IntelliSense для частичного класса показана на рис13.Компилятор успешно соединил части частичного класса в несколькихфайлах. Методы MethodPart1 и MethodPart2, объявленные в разныхфайлах, показаны в едином откомпилированном классе.73Рис. 13. Работа IntelliSense для частичного класса.4.8 Создание диаграммы классов в Visual StudioДля удобства разработки в Visual Studio существует возможностьсоздания диаграммы классов.Для добавления диаграммы классов необходимо добавить в проектэлемент «диаграмма классов», как показано на рис.

14, 15.Нужно нажать правую кнопку мыши на проекте в дереве проектов ивыбрать в контекстном меню пункты «Добавить/Создать элемент».Затем в диалоге добавления нового элемента следует выбрать пунктменю «диаграмма классов» (файл с расширением .cd).Схема классов открывается в виде белого «холста», на который нужнопереносить файлы из обозревателя решений.

При этом все классы данногофайла автоматически попадают на диаграмму. Пример такой диаграммыприведен на рис. 16.Нотация диаграмм классов в Visual Studio практически полностьюсоответствует нотации диаграмм классов UML (Unified ModellingLanguage). Наследование классов показано незаштрихованной треугольнойстрелкой, реализация интерфейсов – стрелкой в виде незаштрихованнойокружности.При нажатии на холсте правой кнопки мыши предоставляетсявозможность выбрать в контекстном меню пункт «экспорт схемы какизображения». В этом случае вся диаграмма классов экспортируется как74изображение в графическом формате (jpeg, png, другие форматы), чтоудобно для оформления документации.Рис.

14. Добавление диаграммы классов (шаг 1).Рис. 15. Добавление диаграммы классов (шаг 2).В панели кнопок диаграммы классов предусмотрены различныеварианты отображения информации о полях классов (рис. 17): только имена полей;75 имена и типы полей; полная сигнатура.Рис. 16. Фрагмент диаграммы классов.Рис. 17.

Кнопки отображения информации о полях классов.764.9 Пример классов для работы с геометрическимифигурамиВ качестве обобщающего примера в данном разделе приведеныфрагментыпримера4–программы,реализующейработусгеометрическими фигурами.4.9.1 Абстрактный класс «Геометрическая фигура»Основа системы классов для работы с геометрическими фигурами –абстрактный класс «Геометрическая фигура»:usingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Text;namespace Figures{/// <summary>/// Класс фигура/// </summary>abstract class Figure{/// <summary>/// Тип фигуры/// </summary>public string Type{get{return this._Type;}protected set{this._Type = value;}}string _Type;/// <summary>/// Вычисление площади/// </summary>public abstract double Area();/// <summary>/// Приведение к строке, переопределение метода Object77/// </summary>public override string ToString(){return this.Type + " площадью " +this.Area().ToString();}}}Класс объявлен как абстрактный с помощью ключевого слова abstract.Далее объявляется строковое свойство (property) Type, содержащеестроковое наименование фигуры.

Данной свойство объявлено в полнойформе, хотя оно содержит стандартный код и могло бы быть объявлено какавтоопределяемое свойство:public string Type { get; protected set; }Set-аксессор свойства объявлен с областью видимости protected, тоесть присваивать значение данному свойству можно только в текущемклассе и в классах-наследниках.Далее объявляется абстрактный метод вычисления площади «doubleArea()», который должен быть определен в классах-наследниках. Онвозвращает значение площади (тип double) и не принимает параметров, таккак площадь должна вычисляться на основе внутренних данных классовгеометрических фигур.Затем переопределяется виртуальный метод ToString из класса Objectдля приведения к строковому типу.4.9.2 Интерфейс IPrintИнтерфейсIPrintгеометрической фигуре:namespace Figures{interface IPrint{void Print();}}предназначендлявыводаинформациио78Интерфейс содержит метод Print(), который не принимает параметрови возвращает void.В дальнейшем классы Прямоугольник, Квадрат и Круг будутреализовывать интерфейс IPrint.

Переопределяемый метод Print() будетвыводить в консоль информацию, возвращаемую переопределеннымметодом ToString().4.9.3 Класс «Прямоугольник»КлассПрямоугольникнаследуетсяотабстрактногоГеометрическая фигура и реализует интерфейс IPrint:usingusingusingusingSystem;System.Collections.Generic;System.Linq;System.Text;namespace Figures{class Rectangle : Figure, IPrint{/// <summary>/// Высота/// </summary>double height;/// <summary>/// Ширина/// </summary>double width;/// <summary>/// Основной конструктор/// </summary>/// <param name="ph">Высота</param>/// <param name="pw">Ширина</param>public Rectangle(double ph, double pw){this.height = ph;this.width = pw;this.Type = "Прямоугольник";}/// <summary>/// Вычисление площадикласса79/// </summary>public override double Area(){double Result = this.width * this.height;return Result;}public void Print(){Console.WriteLine(this.ToString());}}}Класс содержит поля данных для высоты и ширины.

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

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

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