Ход работы:
-
Изучить теоретическую часть.
-
Выполнить задания, следуя указаниям.
-
Ответить на контрольные вопросы (в устной форме).
-
Предъявить преподавателю результаты работы программы и исходные коды.
-
Оформить отчет в соответствии с ходом работы (тема, цель, условие задачи, программный код, результаты тестирования программы, выводы).
Теоретическая часть
Оператор Inherits используется для объявления нового класса, называемого производным классом, который основан на существующем классе, называемом базовым классом.Производные классы наследуют и могут расширять свойства, методы и события, поля и константы, определенные в базовом классе.
Все классы могут наследоваться по умолчанию, если только они не помечены зарезервированным словом NotInheritable.Классы могут наследовать из других классов проекта или из классов других сборок, на которые ссылается проект.
В отличие от языков, которые позволяют множественное наследование, VisualBasic позволяет только единичное наследование в классах; то есть производные классы могут иметь только один базовый класс.Хотя в классах не поддерживается множественное наследование, они все же могут реализовывать множественные интерфейсы, которые способны эффективно выполнять те же самые задачи.
Чтобы предотвратить предоставление элементов с ограничениями в базовом классе, тип доступа к производному классу должен быть таким же, как и тип доступа к базовому классу, или более строгим.Например, Public класс не может наследовать Friend или Private класс, а Friend класс не может наследовать Private класс.
Модификаторы наследования
Для поддержки наследования VisualBasic вводит следующие инструкции на уровне класса и модификаторы:
Инструкция Inherits определяет базовый класс.
Модификатор NotInheritableне позволяет использовать класс в качестве базового класса.
Модификатор MustInherit определяет, что класс предназначен только для использования в качестве базового класса.Невозможно создать напрямую экземпляры классов MustInherit; их можно создать только как экземпляры базового класса в производном классе
Наследование форм с помощью инструмента Выбор наследования
В терминологии объектно-ориентированного программирования наследование означает, что один класс получает объекты, свойства, методы и другие атрибуты другого класса. VisualBasic всегда использует это при создании в среде разработки новой формы. Первая форма проекта (Form1 ) определена на основе класса System.Windows.Forms.Form и получает от него свои значения по умолчанию. На самом деле каждый раз, когда с помощью командыДобавить форму Windows(AddWindowsForm) из меню Проект (Project) создается новая форма, этот класс указывается в верхней части кода каждой формы с использованием ключевого слова Inherits, как показано ниже:
Inherits
System.Windows.Forms.Form
Вы неосознанно всегда использовали наследование для определения форм Windows, которые использовали при создании приложений VisualBasic. Хотя существующие формы могут наследоваться с помощью кода программы, разработчики VisualStudio .NET сочли эту задачу важной и разработали специальный инструмент среды разработки, облегчающий этот процесс. Этот инструмент называется Выбор наследования (InheritancePicker). Он доступен через команду Добавить производную форму (AddInheritedForm) в меню Проект (Project). В следующем упражнении вы будете использовать Выбор наследования (InheritancePicker)для создания второй копии диалогового окна проекта.
Задание 1. Наследование простого диалогового окна
Запустите VisualStudio и создайте новый проект с именем MyFormInheritance.
Отобразите форму проекта и используйте элемент управления Button для добавления в нижнюю часть формы двух расположенных рядом объектов кнопок.
Измените свойства Text кнопок Button1 и Button2 на "OK" и "Отмена" соответственно.
Чтобы отобразить в Редакторе кода процедуру события Button1_Click, сделайте двойной щелчок мышью на кнопке OK.
Введите следующий оператор программы:
Снова отобразите форму, сделайте двойной щелчок мышью на кнопке Отмена, а затем введите в процедуре события Button2_Click следующий оператор программы:
Снова отобразите форму, а затем установите свойство Text формы на значение "Диалоговое окно". Теперь у вас есть простая форма, которую можно использовать как основу для диалогового окна программы. С помощью некоторых настроек вы можете использовать эту базовую форму для выполнения нескольких задач - просто нужно добавить на нее элементы управления, которые потребуются вашему приложению.
Попрактикуйтесь в наследовании форм. Первым шагом в этом процессе является сборка - или компиляция - проекта, так как наследовать можно только от тех форм, которые скомпилированы в виде файлов .exe или .dll. Каждый раз, когда компилируется базовая форма, изменения, сделанные в этой базовой форме, передаются в производную (наследованную) форму.
Щелкните на команде Построить решение (BuildSolution) в меню Построение (Build). Visual Basic скомпилирует ваш проект и создаст .exe-файл.
Щелкните на команде Добавить производную форму (Add Inherited Form) в меню Проект (Project). Вы увидите диалоговое окно, показанное ниже. Как обычно, Visual Studio приводит список всех возможных шаблонов, которые вы можете включить в проект. На панели Установленные шаблоны выберите Windows Forms, а справа-Производная форма (Inherited Form). Текстовое поле Имя(Name) в нижней части диалогового окна позволяет присвоить вашей производной форме имя; это имя, которое появится в Обозревателе решений (Solution Explorer) и в имени файла формы на диске.
Щелкните на Добавить (Add), чтобы принять для новой формы установки по умолчанию. Visual Studio отобразит диалоговое окно Выбор компонентов для наследования (Inheritance Picker), показанное ниже.
Это диалоговое окно содержит перечень всех форм текущего проекта, от которых можно наследовать. Если вы хотите просмотреть другие скомпилированные формы, щелкните на кнопке Обзор (Browse) и найдите на вашем жестком диске требуемый .dll-файл. (Если вы хотите наследовать от формы, которая не является компонентой текущего проекта, форма должна быть скомпилирована в .dll-файл.)
Щелкните в диалоговом окне Выбор наследования (Inheritance Picker) на Form1, а затем на OK. Visual Studio создаст в Обозревателе решений (Solution Explorer) элемент Form2.vb и отобразит в Конструкторе Windows Forms (Windows Forms Designer) производную форму. На следующем рисунке обратите внимание, что форма выглядит идентично окну Form1, созданному ранее, за исключением того, что две кнопки содержат маленькие значки, которые указывают, что объекты получены из наследуемого источника.
Иногда сложно отличить производную форму от базовой (маленькие значки наследования не так очевидны), так что используйте для различения этих форм Обозреватель решений (Solution Explorer) и закладки окон среды разработки.
Теперь вы должны добавить к производной форме несколько новых элементов.
Настройка производной формы
Используйте элемент управления Button и добавьте на Form2 (производная форма) третью кнопку.
Установите свойство Text этой кнопки равным "Нажми меня!".
Сделайте двойной щелчок мышью на кнопке Нажми меня!
В процедуре события Button3_Click введите следующий оператор программы:
Снова отобразите форму Form2, а затем попробуйте сделать двойной щелчок мышью на кнопках OK и Отмена. Вы не можете отобразить или отредактировать процедуры событий для этих унаследованных объектов без дополнительных действий, которые не обсуждаются здесь. Однако вы можете добавить в форму новые объекты и настроить их.
Увеличьте форму. Вы также можете изменить другие характеристики формы, такие, как ее размер и расположение.
Щелкните в Обозревателе решений (Solution Explorer) на значке проекта My Form Inheritance, а затем на команде Свойства (Properties) в меню Проект(Project). Появится диалоговое окно.
Щелкните на раскрывающемся списке Начальная форма, далее на Form2, а затем на OK. Запустите новый проект.
Щелкните на кнопке Начать(Start). Откроется производная форма, показанная ниже.
Щелкните на кнопке OK. Производная форма выполнит процедуру события наследуемой формы Form1, и она выведет следующее сообщение.
Щелкните на Oтмена, а затем на Нажми меня!. Form2 отобразит наследуемое сообщение формы. Производная форма настроена так, чтобы включить новый объект, а также два наследуемых объекта кнопки. Вы сделали первые шаги в освоении механизма наследования с помощью диалогового окна InheritancePicker (Выбор наследования).
Чтобы закрыть окно сообщения, щелкните на OK, а затем на Закрыть формы, чтобы завершить выполнение программы. Программа остановится, и вернется среда разработки.
Задание 2.Наследование базового класса
Точно так же, как при наследовании классов форм, вы можете наследовать обычные классы, которые вы сами определяете с помощью командыДобавить класс (AddClass) и модуля класса. Механизм наследования базового (родительского) класса состоит в использовании оператора Inherits, который включает ранее определенный класс в новый класс. Затем вы можете добавить в производный (дочерний) класс новые свойства или методы, которые будут отличать его от базового класса.
Задание:Изменить проект MyPersonClass (проект из Л_Р_№2), добавив в модуль класса Person второй класс, определенный пользователем. Этот новый класс с именем Teacher будет наследовать от класса Person свойство FirstName, свойство LastName и метод Age, и будет добавлять свойство с именем Grade, в которое будет записываться уровень, на котором обучает новый учитель.
Использование ключевого слова Inherits
Щелкните в Обозревателе решений на классе Person.vb, а затем щелкните на кнопкеПросмотреть код (ViewCode).
Прокрутите Редактор кода вниз так, что текстовый курсор окажется стоящим после оператора EndClass. Как упоминалось выше, вы можете включить в модуль класса более одного класса, при условии, что каждый класс отделен от остальных операторами PublicClass и EndClass. Вы создадите в этом модуле класса новый класс с именем Teacher, а для встраивания в него методов и свойств, определенных вами в классе Person, будете использовать ключевое слово Inherits.
Введите в Редактор кода следующее определение класса.
Оператор Inherits связывает класс Person с этим новым классом, встраивая в него все свои переменные, свойства и методы. Если бы класс Person находился в отдельном модуле или проекте, вы могли бы указать его расположение, задав пространство имен, точно так же, как вы указываете классы библиотеки .NET Framework с помощью оператора Imports. По существу класс Teacher определен как специальный тип класса Person - в дополнение к свойствам FirstName и LastName класс Teacher имеет свойство Grade, которое хранит уровень студента, обучаемого учителем. Теперь вы будете использовать этот новый класс в процедуре события Button1_Click.
Отобразите процедуру события Button1_Click формы Form1. Вместо создания новой переменной для хранения класса Teacher, просто используйте имеющуюся переменную Employee - единственное различие будет в том, что теперь вы можете установить свойство Grade нового сотрудника.
Измените процедуру события Button1_Click в соответствии со следующим кодом.
В этом примере мы удалили вычисление текущего возраста - метод Age не используется, но сделали это только для того, чтобы сократить до минимума информацию, выводимую в окне сообщения. Когда вы определяете свойства и методы класса, вам не требуется использовать их в коде программы.
Чтобы запустить программу, щелкните на кнопке Начать отладку. На экране появится форма для ввода данных о новом сотруднике.
Введите в текстовое поле Имя ваше имя, а в текстовое поле Фамилия - фамилию.
Щелкните на объекте выбора даты и прокрутите его до вашего дня рождения.
Щелкните на кнопке Отобразить запись. Ваша программа сохраняет значения имени и фамилии в свойствах, а затем отображает следующее окно ввода.
Введите 4, а затем щелкните на OK, чтобы закрыть окно ввода. Приложение сохраняет число 4 в новом свойстве Grade и использует свойства FirstName, LastName и Grade для отображения информации о новом сотруднике в подтверждающем окне сообщения. Вы увидите такое сообщение.
Если хотите, поэкспериментируйте еще с несколькими значениями, а затем щелкните на кнопкеЗакрыть формы. Программа остановится, и вернется среда разработки.
Контрольные вопросы:
Что означает наследование в терминологии ООП?
Какой оператор необходимо использовать для объявления производного класса?
На основе какого класса определена первая форма проекта?
Опишите действия по добавлению производной формы.
Назовите визуальные отличия производной формы от базовой.
Лабораторная работа №4
Перегрузка методов
Цель: научиться выполнять перегрузку методов в среде Visual Studio.
|