Visual Basic .NET на уроках информатики

Наследование форм и создание базовых классов

Разбить на страницы
Показывать лекцию целиком

В этой лекции вы узнаете, как:

  • использовать Inheritance Picker (Выбор наследования) для встраивания в проект готовых форм;
  • создавать собственные базовые классы с собственными свойствами и методами;
  • создавать производные классы на основе базовых классов с помощью оператора Inherits.
  • Сейчас среди разработчиков программного обеспечения модным словечком стало объектно-ориентированное программирование (ООП). Microsoft Visual Basic 4 добавил в язык Visual Basic несколько объектно-ориентированных возможностей программирования, но если верить экспертам, Visual Basic отставал от истинно объектно-ориентированных языков, таких, как Microsoft Visual C++. В Visual Basic отсутствовало наследование - механизм, который позволяет одному классу принимать заранее созданный интерфейс и характеристики поведения от другого класса. Visual Basic .NET теперь поддерживает наследование, что означает, что вы можете создать одну форму в среде разработки и передать ее характеристики и функциональность другим формам. В дополнение к этому вы можете создавать ваши собственные классы и наследовать от них свойства, методы и события. В этой лекции вы будете экспериментировать с обоими типами наследования. Вы узнаете, как с помощью нового инструмента Visual Studio .NET, который называется Inheritance Picker (Выбор наследования), интегрировать существующие формы в ваши проекты, а также узнаете, как создавать собственные классы и с помощью оператора Inherits наследовать от них новые классы. Получив эти навыки, вы сможете использовать множество форм и процедур кода, которые вы уже разработали, что сделает программирование на Visual Basic более быстрым и гибким.

    Что нового в Visual Basic .NET?

  • Возможность наследования форм в среде разработки Visual Studio с помощью инструмента Inheritance Picker (Выбор наследования).
  • Классы теперь определяются между ключевыми словами Public Class и End Class.
  • В одном исходном файле теперь может храниться несколько классов, определенных пользователем. (В Visual Basic 6 каждый новый класс должен был храниться в своем собственном файле.)
  • Свойства добавляются в класс с помощью нового синтаксиса Visual Studio .NET, а синтаксис Property Get, Property Let и Property Set больше не поддерживается.
  • Ключевое слово Inherits позволяет новым производным классам наследовать интерфейс и поведение существующего класса.
  • Наследование форм с помощью инструмента Выбор наследования

    В терминологии объектно-ориентированного программирования наследование означает, что один класс получает объекты, свойства, методы и другие атрибуты другого класса. Visual Basic всегда использует это при создании в среде разработки новой формы. Первая форма проекта ( Form1 ) определена на основе класса System.Windows.Forms.Form и получает от него свои значения по умолчанию. На самом деле каждый раз, когда с помощью команды Add Windows Form (Добавить форму Windows) из меню Project (Проект) создается новая форма, этот класс указывается в верхней части кода каждой формы с использованием ключевого слова Inherits, как показано ниже:

    Inherits
    System.Windows.Forms.Form

    Вы неосознанно всегда использовали наследование для определения форм Windows, которые использовали при создании приложений Visual Basic. Хотя существующие формы могут наследоваться с помощью кода программы, разработчики Visual Studio .NET сочли эту задачу важной и разработали специальный инструмент среды разработки, облегчающий этот процесс. Этот инструмент называется Inheritance Picker (Выбор наследования). Он доступен через команду Add Inherited Form (Добавить производную форму) в меню Project (Проект). В следующем упражнении вы будете использовать Inheritance Picker (Выбор наследования) для создания второй копии диалогового окна проекта.

    Наследование простого диалогового окна

  • Запустите Visual Studio и создайте в папке c:\vbnet03sbs\Гл.17 новый проект с именем My Form Inheritance.
  • Отобразите форму проекта и используйте элемент управления Button для добавления в нижнюю часть формы двух расположенных рядом объектов кнопок.
  • Измените свойства Text кнопок Button1 и Button2 на "OK" и "Отмена" соответственно.
  • Чтобы отобразить в Редакторе кода процедуру события Button1_Click, сделайте двойной щелчок мышью на кнопке OK.
  • Введите следующий оператор программы:

    MsgBox("Вы нажали OK")
  • Снова отобразите форму, сделайте двойной щелчок мышью на кнопке Отмена, а затем введите в процедуре события Button2_Click следующий оператор программы:

    MsgBox("Вы нажали Отмена")
  • Снова отобразите форму, а затем установите свойство Text формы на значение "Диалоговое окно". Теперь у вас есть простая форма, которую можно использовать как основу для диалогового окна программы. С помощью некоторых настроек вы можете использовать эту базовую форму для выполнения нескольких задач - просто нужно добавить на нее элементы управления, которые потребуются вашему приложению.

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

  • Щелкните на команде Build Solution (Построить решение) в меню Build (Построение). Visual Basic скомпилирует ваш проект и создаст .exe-файл.
  • Щелкните на команде Add Inherited Form (Добавить производную форму) в меню Project (Проект). Вы увидите диалоговое окно, показанное ниже. Как обычно, Visual Studio приводит список всех возможных шаблонов, которые вы можете включить в проект, а не только те, которые касаются наследования. Но так как разделом по умолчанию на панели Templates (Шаблоны) является Inherited Form (Производная форма), вам не требуется делать никаких изменений. Текстовое поле Name (Имя) в нижней части диалогового окна позволяет присвоить вашей производной форме имя; это имя, которое появится в Solution Explorer (Обозревателе решений) и в имени файла формы на диске.

  • Щелкните на Open (Открыть), чтобы принять для новой формы установки по умолчанию. Visual Studio отобразит диалоговое окно Inheritance Picker (Выбор наследования), показанное ниже.

    Это диалоговое окно содержит перечень всех форм текущего проекта, от которых можно наследовать. Если вы хотите просмотреть другие скомпилированные формы, щелкните на кнопке Browse (Обзор) и найдите на вашем жестком диске требуемый .dll-файл. (Если вы хотите наследовать от формы, которая не является компонентой текущего проекта, форма должна быть скомпилирована в .dll-файл.)

  • Щелкните в диалоговом окне Inheritance Picker (Выбор наследования) на Form1, а затем на OK. Visual Studio создаст в Solution Explorer (Обозревателе решений) элемент Form2.vb и отобразит в Windows Forms Designer (Конструкторе Windows Forms) производную форму. На следующем рисунке обратите внимание, что форма выглядит идентично окну Form1, созданному ранее, за исключением того, что две кнопки содержат маленькие значки, которые указывают, что объекты получены из наследуемого источника.

    Иногда сложно отличить производную форму от базовой (маленькие значки наследования не так очевидны), так что используйте для различения этих форм Solution Explorer (Обозреватель решений) и закладки окон среды разработки.

  • Теперь вы должны добавить к производной форме несколько новых элементов.

    Настройка производной формы

  • Используйте элемент управления Button и добавьте на Form2 (производная форма) третью кнопку.
  • Установите свойство Text этой кнопки равным "Нажми меня!".
  • Сделайте двойной щелчок мышью на кнопке Нажми меня!
  • В процедуре события Button3_Click введите следующий оператор программы:

    MsgBox("Это подчиненная форма!")
  • Снова отобразите форму Form2, а затем попробуйте сделать двойной щелчок мышью на кнопках OK и Отмена. Вы не можете отобразить или отредактировать процедуры событий для этих унаследованных объектов без дополнительных действий, которые не обсуждаются в этой лекции. Однако вы можете добавить в форму новые объекты и настроить их.
  • Увеличьте форму. Вы также можете изменить другие характеристики формы, такие, как ее размер и расположение. Обратите внимание, что если вы для настройки формы используете окно Properties (Свойства), раскрывающийся список Object (Объект) отображает форму, от которой текущая форма является производной. Теперь установите загрузочный объект равным Form2.
  • Щелкните в Solution Explorer (Обозревателе решений) на значке проекта My Form Inheritance, а затем на команде Properties (Свойства) в меню Project (Проект). Появится диалоговое окно Property Pages (Страницы свойств).
  • Щелкните на раскрывающемся списке Startup Object (Начальный объект), далее на Form2, а затем на OK. Запустите новый проект.
  • Щелкните на кнопке Start (Начать). Откроется производная форма, показанная ниже.

  • Щелкните на кнопке OK. Производная форма выполнит процедуру события наследуемой формы Form1, и она выведет следующее сообщение.

  • Щелкните на OK, а затем на Нажми меня!. Form2 отобразит наследуемое сообщение формы. Производная форма настроена так, чтобы включить новый объект, а также два наследуемых объекта кнопки. Поздравляем! Вы сделали первые шаги в освоении механизма наследования с помощью диалогового окна Inheritance Picker (Выбор наследования).
  • Чтобы закрыть окно сообщения, щелкните на OK, а затем на Закрыть формы, чтобы завершить выполнение программы. Программа остановится, и вернется среда разработки.
  • Создание собственных базовых классов

    Инструмент Inheritance Picker (Выбор наследования) выполнил процесс наследования в предыдущем упражнении с помощью создания в вашем проекте нового класса с именем Form2. Чтобы создать класс Form2, Inheritance Picker (Выбор наследования) устанавливает связь между классом Form1 из проекта My Form Inheritance и новой формой. Вот как выглядит в Редакторе кода новый класс Form2:

    Public Class Form2
    	Inherits My_Form_Inheritance.Form1
    	...
    	Private Sub Button3_Click(ByVal sender As System.Object, _
    		ByVal e As System.EventArgs) Handles Button3.Click
    		MsgBox("Это подчиненная форма!")
    	End Sub
    End Class

    В дополнение к оператору Inherits в верхней части кода формы, членом нового класса также является добавленная вами процедура события Button3_Click. Но вспомните, что класс Form1 сам в своем базовом поведении и характеристиках основан на классе System.Windows.Forms.Form. Таким образом, последнее упражнение демонстрирует, что один производный класс ( Form2 ) может наследовать свою функциональность от второго производного класса ( Form1 ). Он, в свою очередь, наследует свою функциональность от первоначального базового класса (Form), который является членом пространства имен System.Windows.Forms библиотеки .NET Framework.

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

    Предупреждение

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

    Добавление в ваш проект нового класса

    Класс, определенный пользователем, позволяет определить в программе ваши собственные объекты, которые имеют свойства, методы и события, точно так же, как объекты, создаваемые на формах Windows с помощью элементов управления из Области элементов. Чтобы добавить в ваш проект новый класс, щелкните в меню Project (Проект) на команде Add Class (Добавить класс), а затем определите этот класс с помощью кода программы и нескольких новых ключевых слов Visual Basic.

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

    Создание проекта Person Class

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.17 новый проект с именем My Person Class.
  • Используйте элемент управления Label и добавьте в верхней части формы Form1 длинную метку.
  • Используйте элемент управления TextBox и нарисуйте под меткой два широких текстового поля.
  • Используйте элемент управления DateTimePicker и нарисуйте под текстовыми полями объект выбора даты и времени. В прошлый раз вы использовали элемент управления DateTimePicker для ввода дат (см. лекцию 3).
  • Используйте элемент управления Button и нарисуйте под объектом выбора даты и времени кнопку.
  • Установите для объектов формы следующие свойства:

    Объект Свойство Установка
    Label1 Text Введите имя, фамилию и дату рождения сотрудника.
    TextBox1 Text Имя
    TextBox2 Text Фамилия
    Button1 Text Отобразить запись
    Form1 Text Класс Person
  • Ваша форма должна выглядеть примерно так.

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

  • Щелкните на команде Add Class (Добавить класс) в меню Project (Проект). Visual Studio откроет диалоговое окно Add New Item (Добавление нового элемента), показанное ниже.

    Диалоговое окно Add New Item (Добавление нового элемента) дает возможность задать имя вашего класса. Когда вы присвоите имя, обратите внимание, что вы можете сохранить в новом модуле класса несколько классов и указать имя, которое будет для них общим.

  • Введите в текстовом поле Name (Имя) имя Person.vb, а затем щелкните на Open (Открыть). Visual Studio откроет в Редакторе кода пустой модуль класса и добавит имя файла Person.vb в ваш проект в Обозревателе решений, как показано ниже.

    Теперь вы должны ввести в модуле класса определение вашего класса и изучить несколько новых ключевых слов Visual Basic. Необходимо объявить переменные класса, создать свойства и метод.

  • Объявление переменных класса

  • Под оператором программы Public Class Person введите следующие объявления переменных:

    Private Name1 As String
    Private Name2 As String

    Здесь вы объявляете две переменные, которые будут использованы исключительно в модуле класса для хранения значений двух строковых свойств. Я объявил эти переменные с помощью ключевого слова Private, так как по соглашению Visual Basic программисты должны держать внутренние переменные класса закрытыми - другими словами, недоступными для просмотра извне самого модуля класса.

  • Создание свойств

  • Под объявлением переменных введите следующий оператор программы и нажмите клавишу (Enter):

    Public Property FirstName() As String

    Этот оператор создает свойство вашего класса с именем FirstName, которое имеет тип String. Когда вы нажмете (Enter), Visual Studio немедленно создаст структуру кода для остальных элементов объявления свойства. Требуемыми элементами являются: блок Get, который определяет, что программисты увидят, когда будут проверять свойство FirstName, блок Set, который определяет, что произойдет, когда свойство FirstName будет установлено или изменено, и оператор End Property, который отмечает конец процедуры свойства.

    Примечание. В Visual Basic 6 процедуры свойств содержали блоки кода Property Get, Property Let и Property Set. Этот синтаксис больше не поддерживается.
  • Заполните структуру процедуры свойства так, чтобы она выглядела, как показано ниже. (Вводимые вами элементы не выделены жирным шрифтом.)

    Public Property FirstName() As String
    	Get
    		Return Name1
    	End Get
    	Set(ByVal Value As String)
    		Name1 = Value
    	End Set
    End Property

    Ключевое слово Return указывает, что при обращении к свойству FirstName будет возвращена строковая переменная Name1. При установке значения свойства блок Set присваивает переменной Name1 строковое значение. Обратите особое внимание на переменную Value, используемую в процедурах свойств для обозначения значения, которое присваивается свойству класса при его установке. Хотя этот синтаксис может выглядеть странно, просто поверьте мне - именно так создаются свойства в элементах управления, хотя более сложные свойства будут иметь здесь дополнительную программную логику, которая будет проверять значения и производить вычисления.

  • Под оператором End Property введите для свойства LastName вашего класса вторую процедуру свойства. Она должна выглядеть так, как показано ниже. (Жирным шрифтом выделены строки, которые нужно ввести.)

    Public Property LastName() As String
    	Get
    		Return Name2
    	End Get
    		Set(ByVal Value As String)
    		Name2 = Value
    	End Set
    End Property

    Эта процедура свойства аналогична первой, за исключением того, что она использует вторую строковую переменную ( Name2 ), которую вы объявили в верхней части кода класса. Вы закончили определять два свойства вашего класса. Теперь перейдем к методу с именем Age, который будет определять текущий возраст нового сотрудника на основе даты рождения.

  • Создание метода

  • Под процедурой свойства LastName введите следующее определение функции:

    Public Function Age(ByVal Birthday As Date) As Integer
    	Return Int(Now.Subtract(Birthday).Days / 365.25)
    End Function

    Чтобы создать метод класса, который выполняет некое действие, добавьте в ваш класс процедуру Sub. Хотя многие методы не требуют для выполнения своей работы аргументов, метод Age, определенный мной, требует для своих вычислений аргумент Birthday типа Date. Это метод использует для вычитания даты рождения нового сотрудника из текущей системной даты метод Subtract, и возвращает значение, выраженное в днях, деленных на 365.25 - примерную длину одного года в днях. Функция Int преобразует это значение в целое, и это число с помощью оператора Return возвращается в вызывающую процедуру - как и в случае с обычной функцией. (За дополнительной информацией об определении функций обратитесь к лекции 10 .)

    Определение класса закончено! Вернитесь к форме Form1 и используйте новый класс в процедуре события.

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

  • Щелкните в Обозревателе решений на значке Form1.vb, а затем на кнопке View Designer (Просмотреть конструктор). Появится интерфейс пользователя Form1.
  • Чтобы открыть в Редакторе кода процедуру события Button1_Click, сделайте двойной щелчок мышью на кнопке Отобразить запись.
  • Введите следующие операторы программы:

    Dim Employee As New Person
    Dim DOB As Date
    
    Employee.FirstName = TextBox1.Text
    Employee.LastName = TextBox2.Text
    DOB = DateTimePicker1.Value.Date
    
    MsgBox(Employee.FirstName  "" Employee.LastName _
     "в возрасте "  Employee.Age(DOB)  "лет.")

    Эта процедура сохраняет в объекте с именем Employee, который имеет тип Person, значения, введенные пользователем. Ключевое слово New указывает, что вы хотите немедленно создать новый экземпляр объекта Employee. Теперь нужно объявить переменную с помощью класса, созданного вами самими! Затем процедура объявляет переменную с именем DOB типа Date. Она будет хранить дату, введенную пользователем, и устанавливает свойства FirstName и LastName объекта Employee равными имени и фамилии, введенным в два объекта текстовых полей формы. Значение, возвращаемое объектом выбора даты и времени, сохраняется в переменной DOB, а последний оператор программы отображает окно сообщения, содержащее свойства FirstName и LastName, а также возраст нового сотрудника, определенный методом Age, который при передаче в него переменной DOB возвращает целое значение. Как только вы определили класс в модуле класса, его легко можно использовать в процедуре события.

  • Чтобы запустить программу, щелкните на кнопке Start (Начать).

    Примечание. Готовая программа Person Class лежит в папке c:\vbnet03sbs\Гл.17\person class.

    В среде разработки появится интерфейс пользователя, готовый к приему ваших данных.

  • Введите в текстовое поле First Name ваше имя, а в текстовое поле Last Name - фамилию.
  • Щелкните на раскрывающемся списке объекта выбора даты и времени, и прокрутите его до вашей даты рождения.

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

    Ваша форма будет выглядеть примерно так.

  • Щелкните на кнопке Отобразить запись. Ваша программа сохраняет значения имени и фамилии в свойствах и использует метод Age для вычисления текущего возраста нового сотрудника. Появится диалоговое окно с результатом.

  • Чтобы закрыть это окно сообщения, щелкните на OK, а затем поэкспериментируйте с несколькими различными значениями дат, щелкая на Отобразить запись каждый раз, когда вы меняете значение поля даты рождения.
  • Когда вы закончите экспериментировать с вашим новым классом, щелкните на кнопке Закрыть. Вернется среда разработки.
  • Следующий шаг: наследование базового класса

    У меня есть еще один прием, касающийся классов, определенных пользователем, и наследования. Сейчас мы к нему перейдем. Точно так же, как при наследовании классов форм, вы можете наследовать обычные классы, которые вы сами определяете с помощью команды Add Class (Добавить класс) и модуля класса. Механизм наследования базового (родительского) класса состоит в использовании оператора Inherits, который включает ранее определенный класс в новый класс. Затем вы можете добавить в производный (дочерний) класс новые свойства или методы, которые будут отличать его от базового класса.

    В следующем упражнении вы измените проект My Person Class, добавив в модуль класса Person второй класс, определенный пользователем. Этот новый класс с именем Teacher будет наследовать от класса Person свойство FirstName, свойство LastName и метод Age, и будет добавлять свойство с именем Grade, в которое будет записываться уровень, на котором обучает новый учитель.

    Использование ключевого слова Inherits

  • Щелкните в Обозревателе решений на классе Person.vb, а затем щелкните на кнопке View Code (Просмотреть код).
  • Прокрутите Редактор кода вниз так, что текстовый курсор окажется стоящим после оператора End Class. Как упоминалось выше, вы можете включить в модуль класса более одного класса, при условии, что каждый класс отделен от остальных операторами Public Class и End Class. Вы создадите в этом модуле класса новый класс с именем Teacher, а для встраивания в него методов и свойств, определенных вами в классе Person, будете использовать ключевое слово Inherits.
  • Введите в Редактор кода следующее определение класса. (Введите операторы, выделенные ниже жирным шрифтом - Visual Studio автоматически добавит остальные операторы.)

    Public Class Teacher
    	Inherits Person
    	Private Level As Short
    
    	Public Property Grade() As Short
    		Get
    			Return Level
    		End Get
    		Set(ByVal Value As Short)
    			Level = Value
    		End Set
    	End Property
    End Class

    Оператор Inherits связывает класс Person с этим новым классом, встраивая в него все свои переменные, свойства и методы. Если бы класс Person находился в отдельном модуле или проекте, вы могли бы указать его расположение задав пространство имен, точно так же, как вы указываете классы библиотеки .NET Framework с помощью оператора Imports. По существу я определил класс Teacher как специальный тип класса Person - в дополнение к свойствам FirstName и LastName класс Teacher имеет свойство Grade, которое хранит уровень студента, обучаемого учителем. Теперь вы будете использовать этот новый класс в процедуре события Button1_Click.

  • Отобразите процедуру события Button1_Click формы Form1. Вместо создания новой переменной для хранения класса Teacher, я просто использую имеющуюся переменную Employee - единственное различие будет в том, что теперь я могу установить свойство Grade нового сотрудника.

  • Измените процедуру события Button1_Click в соответствии со следующим кодом. (Вводимые вами строки выделены жирным шрифтом.)

    Dim Employee As New Teacher
    Dim DOB As Date
    
    Employee.FirstName = TextBox1.Text
    Employee.LastName = TextBox2.Text
    DOB = DateTimePicker1.Value.Date
    Employee.Grade = InputBox("На каком уровне вы обучаете?")
    
    MsgBox(Employee.FirstName  "" Employee.LastName _
     "обучает на уровне " Employee.Grade)

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

  • Чтобы запустить программу, щелкните на кнопке Start (Начать).

    Примечание. Готовая программа Class Inheritance лежит в папке c:\vbnet03sbs\Гл.17\class inheritance.

    На экране появится форма для ввода данных о новом сотруднике.

  • Введите в текстовое поле Имя ваше имя, а в текстовое поле Фамилия - фамилию.
  • Щелкните на объекте выбора даты и прокрутите его до вашего дня рождения.
  • Щелкните на кнопке Отобразить запись. Ваша программа сохраняет значения имени и фамилии в свойствах, а затем отображает следующее окно ввода.

  • Введите 3, а затем щелкните на OK, чтобы закрыть окно ввода. Приложение сохраняет число 3 в новом свойстве Grade и использует свойства FirstName, LastName и Grade для отображения информации о новом сотруднике в подтверждающем окне сообщения. Вы увидите такое сообщение.

  • Если хотите, поэкспериментируйте еще с несколькими значениями, а затем щелкните на кнопке Закрыть формы. Программа остановится, и вернется среда разработки. Вы закончили работать с классами и наследованием в этой лекции.
  • Дальнейшие эксперименты с объектно-ориентированным программированием

    Если вам понравился этот экскурс в методики написания объектно-ориентированных кодов, то в Visual Basic .NET, который стал истинно объектно-ориентированным языком программирования, вас ожидает еще больше приятных моментов. В частности, вы можете добавить в ваше определение класса события, создать значения свойств по умолчанию и поэкспериментировать с новой функцией полиморфизма, которая называется перегрузкой методов. Эти и другие функции ООП можно изучить с помощью справочной системы Visual Basic или более продвинутых книг по программированию на Visual Basic .NET.

    Краткая справка по лекции 17

    Чтобы Сделайте следующее
    Наследовать интерфейс и функциональность существующей формы Щелкните на команде Add Inherited Form (Добавить производную форму) в меню Project (Проект), укажите имя производной формы, а затем щелкните на Open (Открыть). Для выбора наследуемой формы используйте Inheritance Picker (Выбор наследования), а затем щелкните на OK. Чтобы наследование было возможно, базовая форма должна быть скомпилирована в .exe- или .dll-файл. Если вы хотите наследовать от формы, которая не является компонентой текущего проекта, форма должна быть скомпилирована в .dll-файл.
    Настроить производную форму Добавьте в форму элементы управления Области элементов и установите свойства. Заметьте, что вы не можете установить свойства наследуемых объектов формы. Эти объекты могут быть обнаружены по маленьким значкам и будут неактивными.
    Создать собственные базовые классы Щелкните на команде Add Class (Добавить класс) в меню Project (Проект), укажите имя класса, а затем щелкните на Open (Открыть). С помощью кода программы определите класс в модуле класса.
    Объявить переменные класса

    Используйте ключевое слово Private, чтобы сделать ваши переменные скрытыми при изучении класса. Например:

    Private Name1 As String
    Создать в классе новое свойство

    Определите в классе открытую процедуру свойства. Например:

    Public Property FirstName() As String
    	Get
    		Return Name1
    	End Get
    	Set(ByVal Value As String)
    		Name1 = Value
    	End Set
    End Property
    Создать в классе новый метод

    Определите в классе процедуру Sub или Function. Например:

    Public Function Age(ByVal Birthday As Date) _
    As Integer
    	Return Int(Now.Subtract(Birthday).Days _
    / 365.25)
    End Function
    Объявить переменную объекта для использования в классе

    Используйте в операторе программы ключевые слова Dim и New, имя переменной и класс, определенный пользователем. Например:

    Dim Employee As New Person
    Установить свойства для переменной объекта

    Используйте обычный синтаксис для установки свойств объекта. Например:

    Employee.FirstName = TextBox1.Text
    Наследовать базовый класс в новом классе

    Создайте новый класс и используйте ключевое слово Inherits для встраивания определений базового класса. Например:

    Public Class Teacher
    	Inherits Person
    	Private Level As Short
    
    	Public Property Grade() As Short
    		Get
    			Return Level
    		End Get	
    		Set(ByVal Value As Short)
    			Level = Value
    		End Set
    	End Property
    End Class
    Страницы:

    В этой лекции вы узнаете, как:

  • использовать Inheritance Picker (Выбор наследования) для встраивания в проект готовых форм;
  • создавать собственные базовые классы с собственными свойствами и методами;
  • создавать производные классы на основе базовых классов с помощью оператора Inherits.
  • Сейчас среди разработчиков программного обеспечения модным словечком стало объектно-ориентированное программирование (ООП). Microsoft Visual Basic 4 добавил в язык Visual Basic несколько объектно-ориентированных возможностей программирования, но если верить экспертам, Visual Basic отставал от истинно объектно-ориентированных языков, таких, как Microsoft Visual C++. В Visual Basic отсутствовало наследование - механизм, который позволяет одному классу принимать заранее созданный интерфейс и характеристики поведения от другого класса. Visual Basic .NET теперь поддерживает наследование, что означает, что вы можете создать одну форму в среде разработки и передать ее характеристики и функциональность другим формам. В дополнение к этому вы можете создавать ваши собственные классы и наследовать от них свойства, методы и события. В этой лекции вы будете экспериментировать с обоими типами наследования. Вы узнаете, как с помощью нового инструмента Visual Studio .NET, который называется Inheritance Picker (Выбор наследования), интегрировать существующие формы в ваши проекты, а также узнаете, как создавать собственные классы и с помощью оператора Inherits наследовать от них новые классы. Получив эти навыки, вы сможете использовать множество форм и процедур кода, которые вы уже разработали, что сделает программирование на Visual Basic более быстрым и гибким.

    Что нового в Visual Basic .NET?

  • Возможность наследования форм в среде разработки Visual Studio с помощью инструмента Inheritance Picker (Выбор наследования).
  • Классы теперь определяются между ключевыми словами Public Class и End Class.
  • В одном исходном файле теперь может храниться несколько классов, определенных пользователем. (В Visual Basic 6 каждый новый класс должен был храниться в своем собственном файле.)
  • Свойства добавляются в класс с помощью нового синтаксиса Visual Studio .NET, а синтаксис Property Get, Property Let и Property Set больше не поддерживается.
  • Ключевое слово Inherits позволяет новым производным классам наследовать интерфейс и поведение существующего класса.
  • Наследование форм с помощью инструмента Выбор наследования

    В терминологии объектно-ориентированного программирования наследование означает, что один класс получает объекты, свойства, методы и другие атрибуты другого класса. Visual Basic всегда использует это при создании в среде разработки новой формы. Первая форма проекта ( Form1 ) определена на основе класса System.Windows.Forms.Form и получает от него свои значения по умолчанию. На самом деле каждый раз, когда с помощью команды Add Windows Form (Добавить форму Windows) из меню Project (Проект) создается новая форма, этот класс указывается в верхней части кода каждой формы с использованием ключевого слова Inherits, как показано ниже:

    Inherits
    System.Windows.Forms.Form

    Вы неосознанно всегда использовали наследование для определения форм Windows, которые использовали при создании приложений Visual Basic. Хотя существующие формы могут наследоваться с помощью кода программы, разработчики Visual Studio .NET сочли эту задачу важной и разработали специальный инструмент среды разработки, облегчающий этот процесс. Этот инструмент называется Inheritance Picker (Выбор наследования). Он доступен через команду Add Inherited Form (Добавить производную форму) в меню Project (Проект). В следующем упражнении вы будете использовать Inheritance Picker (Выбор наследования) для создания второй копии диалогового окна проекта.

    Наследование простого диалогового окна

  • Запустите Visual Studio и создайте в папке c:\vbnet03sbs\Гл.17 новый проект с именем My Form Inheritance.
  • Отобразите форму проекта и используйте элемент управления Button для добавления в нижнюю часть формы двух расположенных рядом объектов кнопок.
  • Измените свойства Text кнопок Button1 и Button2 на "OK" и "Отмена" соответственно.
  • Чтобы отобразить в Редакторе кода процедуру события Button1_Click, сделайте двойной щелчок мышью на кнопке OK.
  • Введите следующий оператор программы:

    MsgBox("Вы нажали OK")
  • Снова отобразите форму, сделайте двойной щелчок мышью на кнопке Отмена, а затем введите в процедуре события Button2_Click следующий оператор программы:

    MsgBox("Вы нажали Отмена")
  • Снова отобразите форму, а затем установите свойство Text формы на значение "Диалоговое окно". Теперь у вас есть простая форма, которую можно использовать как основу для диалогового окна программы. С помощью некоторых настроек вы можете использовать эту базовую форму для выполнения нескольких задач - просто нужно добавить на нее элементы управления, которые потребуются вашему приложению.

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

  • Щелкните на команде Build Solution (Построить решение) в меню Build (Построение). Visual Basic скомпилирует ваш проект и создаст .exe-файл.
  • Щелкните на команде Add Inherited Form (Добавить производную форму) в меню Project (Проект). Вы увидите диалоговое окно, показанное ниже. Как обычно, Visual Studio приводит список всех возможных шаблонов, которые вы можете включить в проект, а не только те, которые касаются наследования. Но так как разделом по умолчанию на панели Templates (Шаблоны) является Inherited Form (Производная форма), вам не требуется делать никаких изменений. Текстовое поле Name (Имя) в нижней части диалогового окна позволяет присвоить вашей производной форме имя; это имя, которое появится в Solution Explorer (Обозревателе решений) и в имени файла формы на диске.

  • Щелкните на Open (Открыть), чтобы принять для новой формы установки по умолчанию. Visual Studio отобразит диалоговое окно Inheritance Picker (Выбор наследования), показанное ниже.

    Это диалоговое окно содержит перечень всех форм текущего проекта, от которых можно наследовать. Если вы хотите просмотреть другие скомпилированные формы, щелкните на кнопке Browse (Обзор) и найдите на вашем жестком диске требуемый .dll-файл. (Если вы хотите наследовать от формы, которая не является компонентой текущего проекта, форма должна быть скомпилирована в .dll-файл.)

  • Щелкните в диалоговом окне Inheritance Picker (Выбор наследования) на Form1, а затем на OK. Visual Studio создаст в Solution Explorer (Обозревателе решений) элемент Form2.vb и отобразит в Windows Forms Designer (Конструкторе Windows Forms) производную форму. На следующем рисунке обратите внимание, что форма выглядит идентично окну Form1, созданному ранее, за исключением того, что две кнопки содержат маленькие значки, которые указывают, что объекты получены из наследуемого источника.

    Иногда сложно отличить производную форму от базовой (маленькие значки наследования не так очевидны), так что используйте для различения этих форм Solution Explorer (Обозреватель решений) и закладки окон среды разработки.

  • Теперь вы должны добавить к производной форме несколько новых элементов.

    Настройка производной формы

  • Используйте элемент управления Button и добавьте на Form2 (производная форма) третью кнопку.
  • Установите свойство Text этой кнопки равным "Нажми меня!".
  • Сделайте двойной щелчок мышью на кнопке Нажми меня!
  • В процедуре события Button3_Click введите следующий оператор программы:

    MsgBox("Это подчиненная форма!")
  • Снова отобразите форму Form2, а затем попробуйте сделать двойной щелчок мышью на кнопках OK и Отмена. Вы не можете отобразить или отредактировать процедуры событий для этих унаследованных объектов без дополнительных действий, которые не обсуждаются в этой лекции. Однако вы можете добавить в форму новые объекты и настроить их.
  • Увеличьте форму. Вы также можете изменить другие характеристики формы, такие, как ее размер и расположение. Обратите внимание, что если вы для настройки формы используете окно Properties (Свойства), раскрывающийся список Object (Объект) отображает форму, от которой текущая форма является производной. Теперь установите загрузочный объект равным Form2.
  • Щелкните в Solution Explorer (Обозревателе решений) на значке проекта My Form Inheritance, а затем на команде Properties (Свойства) в меню Project (Проект). Появится диалоговое окно Property Pages (Страницы свойств).
  • Щелкните на раскрывающемся списке Startup Object (Начальный объект), далее на Form2, а затем на OK. Запустите новый проект.
  • Щелкните на кнопке Start (Начать). Откроется производная форма, показанная ниже.

  • Щелкните на кнопке OK. Производная форма выполнит процедуру события наследуемой формы Form1, и она выведет следующее сообщение.

  • Щелкните на OK, а затем на Нажми меня!. Form2 отобразит наследуемое сообщение формы. Производная форма настроена так, чтобы включить новый объект, а также два наследуемых объекта кнопки. Поздравляем! Вы сделали первые шаги в освоении механизма наследования с помощью диалогового окна Inheritance Picker (Выбор наследования).
  • Чтобы закрыть окно сообщения, щелкните на OK, а затем на Закрыть формы, чтобы завершить выполнение программы. Программа остановится, и вернется среда разработки.
  • Создание собственных базовых классов

    Инструмент Inheritance Picker (Выбор наследования) выполнил процесс наследования в предыдущем упражнении с помощью создания в вашем проекте нового класса с именем Form2. Чтобы создать класс Form2, Inheritance Picker (Выбор наследования) устанавливает связь между классом Form1 из проекта My Form Inheritance и новой формой. Вот как выглядит в Редакторе кода новый класс Form2:

    Public Class Form2
    	Inherits My_Form_Inheritance.Form1
    	...
    	Private Sub Button3_Click(ByVal sender As System.Object, _
    		ByVal e As System.EventArgs) Handles Button3.Click
    		MsgBox("Это подчиненная форма!")
    	End Sub
    End Class

    В дополнение к оператору Inherits в верхней части кода формы, членом нового класса также является добавленная вами процедура события Button3_Click. Но вспомните, что класс Form1 сам в своем базовом поведении и характеристиках основан на классе System.Windows.Forms.Form. Таким образом, последнее упражнение демонстрирует, что один производный класс ( Form2 ) может наследовать свою функциональность от второго производного класса ( Form1 ). Он, в свою очередь, наследует свою функциональность от первоначального базового класса (Form), который является членом пространства имен System.Windows.Forms библиотеки .NET Framework.

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

    Предупреждение

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

    Добавление в ваш проект нового класса

    Класс, определенный пользователем, позволяет определить в программе ваши собственные объекты, которые имеют свойства, методы и события, точно так же, как объекты, создаваемые на формах Windows с помощью элементов управления из Области элементов. Чтобы добавить в ваш проект новый класс, щелкните в меню Project (Проект) на команде Add Class (Добавить класс), а затем определите этот класс с помощью кода программы и нескольких новых ключевых слов Visual Basic.

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

    Создание проекта Person Class

  • Щелкните на команде Close Solution (Закрыть решение) в меню File (Файл), а затем создайте в папке c:\vbnet03sbs\Гл.17 новый проект с именем My Person Class.
  • Используйте элемент управления Label и добавьте в верхней части формы Form1 длинную метку.
  • Используйте элемент управления TextBox и нарисуйте под меткой два широких текстового поля.
  • Используйте элемент управления DateTimePicker и нарисуйте под текстовыми полями объект выбора даты и времени. В прошлый раз вы использовали элемент управления DateTimePicker для ввода дат (см. лекцию 3).
  • Используйте элемент управления Button и нарисуйте под объектом выбора даты и времени кнопку.
  • Установите для объектов формы следующие свойства:

    Объект Свойство Установка
    Label1 Text Введите имя, фамилию и дату рождения сотрудника.
    TextBox1 Text Имя
    TextBox2 Text Фамилия
    Button1 Text Отобразить запись
    Form1 Text Класс Person
  • Ваша форма должна выглядеть примерно так.

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

  • Щелкните на команде Add Class (Добавить класс) в меню Project (Проект). Visual Studio откроет диалоговое окно Add New Item (Добавление нового элемента), показанное ниже.

    Диалоговое окно Add New Item (Добавление нового элемента) дает возможность задать имя вашего класса. Когда вы присвоите имя, обратите внимание, что вы можете сохранить в новом модуле класса несколько классов и указать имя, которое будет для них общим.

  • Введите в текстовом поле Name (Имя) имя Person.vb, а затем щелкните на Open (Открыть). Visual Studio откроет в Редакторе кода пустой модуль класса и добавит имя файла Person.vb в ваш проект в Обозревателе решений, как показано ниже.

    Теперь вы должны ввести в модуле класса определение вашего класса и изучить несколько новых ключевых слов Visual Basic. Необходимо объявить переменные класса, создать свойства и метод.

  • Объявление переменных класса

  • Под оператором программы Public Class Person введите следующие объявления переменных:

    Private Name1 As String
    Private Name2 As String

    Здесь вы объявляете две переменные, которые будут использованы исключительно в модуле класса для хранения значений двух строковых свойств. Я объявил эти переменные с помощью ключевого слова Private, так как по соглашению Visual Basic программисты должны держать внутренние переменные класса закрытыми - другими словами, недоступными для просмотра извне самого модуля класса.

  • Создание свойств

  • Под объявлением переменных введите следующий оператор программы и нажмите клавишу (Enter):

    Public Property FirstName() As String

    Этот оператор создает свойство вашего класса с именем FirstName, которое имеет тип String. Когда вы нажмете (Enter), Visual Studio немедленно создаст структуру кода для остальных элементов объявления свойства. Требуемыми элементами являются: блок Get, который определяет, что программисты увидят, когда будут проверять свойство FirstName, блок Set, который определяет, что произойдет, когда свойство FirstName будет установлено или изменено, и оператор End Property, который отмечает конец процедуры свойства.

    Примечание. В Visual Basic 6 процедуры свойств содержали блоки кода Property Get, Property Let и Property Set. Этот синтаксис больше не поддерживается.
  • Заполните структуру процедуры свойства так, чтобы она выглядела, как показано ниже. (Вводимые вами элементы не выделены жирным шрифтом.)

    Public Property FirstName() As String
    	Get
    		Return Name1
    	End Get
    	Set(ByVal Value As String)
    		Name1 = Value
    	End Set
    End Property

    Ключевое слово Return указывает, что при обращении к свойству FirstName будет возвращена строковая переменная Name1. При установке значения свойства блок Set присваивает переменной Name1 строковое значение. Обратите особое внимание на переменную Value, используемую в процедурах свойств для обозначения значения, которое присваивается свойству класса при его установке. Хотя этот синтаксис может выглядеть странно, просто поверьте мне - именно так создаются свойства в элементах управления, хотя более сложные свойства будут иметь здесь дополнительную программную логику, которая будет проверять значения и производить вычисления.

  • Под оператором End Property введите для свойства LastName вашего класса вторую процедуру свойства. Она должна выглядеть так, как показано ниже. (Жирным шрифтом выделены строки, которые нужно ввести.)

    Public Property LastName() As String
    	Get
    		Return Name2
    	End Get
    		Set(ByVal Value As String)
    		Name2 = Value
    	End Set
    End Property

    Эта процедура свойства аналогична первой, за исключением того, что она использует вторую строковую переменную ( Name2 ), которую вы объявили в верхней части кода класса. Вы закончили определять два свойства вашего класса. Теперь перейдем к методу с именем Age, который будет определять текущий возраст нового сотрудника на основе даты рождения.

  • Создание метода

  • Под процедурой свойства LastName введите следующее определение функции:

    Public Function Age(ByVal Birthday As Date) As Integer
    	Return Int(Now.Subtract(Birthday).Days / 365.25)
    End Function

    Чтобы создать метод класса, который выполняет некое действие, добавьте в ваш класс процедуру Sub. Хотя многие методы не требуют для выполнения своей работы аргументов, метод Age, определенный мной, требует для своих вычислений аргумент Birthday типа Date. Это метод использует для вычитания даты рождения нового сотрудника из текущей системной даты метод Subtract, и возвращает значение, выраженное в днях, деленных на 365.25 - примерную длину одного года в днях. Функция Int преобразует это значение в целое, и это число с помощью оператора Return возвращается в вызывающую процедуру - как и в случае с обычной функцией. (За дополнительной информацией об определении функций обратитесь к лекции 10 .)

    Определение класса закончено! Вернитесь к форме Form1 и используйте новый класс в процедуре события.

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

  • Щелкните в Обозревателе решений на значке Form1.vb, а затем на кнопке View Designer (Просмотреть конструктор). Появится интерфейс пользователя Form1.
  • Чтобы открыть в Редакторе кода процедуру события Button1_Click, сделайте двойной щелчок мышью на кнопке Отобразить запись.
  • Введите следующие операторы программы:

    Dim Employee As New Person
    Dim DOB As Date
    
    Employee.FirstName = TextBox1.Text
    Employee.LastName = TextBox2.Text
    DOB = DateTimePicker1.Value.Date
    
    MsgBox(Employee.FirstName  "" Employee.LastName _
     "в возрасте "  Employee.Age(DOB)  "лет.")

    Эта процедура сохраняет в объекте с именем Employee, который имеет тип Person, значения, введенные пользователем. Ключевое слово New указывает, что вы хотите немедленно создать новый экземпляр объекта Employee. Теперь нужно объявить переменную с помощью класса, созданного вами самими! Затем процедура объявляет переменную с именем DOB типа Date. Она будет хранить дату, введенную пользователем, и устанавливает свойства FirstName и LastName объекта Employee равными имени и фамилии, введенным в два объекта текстовых полей формы. Значение, возвращаемое объектом выбора даты и времени, сохраняется в переменной DOB, а последний оператор программы отображает окно сообщения, содержащее свойства FirstName и LastName, а также возраст нового сотрудника, определенный методом Age, который при передаче в него переменной DOB возвращает целое значение. Как только вы определили класс в модуле класса, его легко можно использовать в процедуре события.

  • Чтобы запустить программу, щелкните на кнопке Start (Начать).

    Примечание. Готовая программа Person Class лежит в папке c:\vbnet03sbs\Гл.17\person class.

    В среде разработки появится интерфейс пользователя, готовый к приему ваших данных.

  • Введите в текстовое поле First Name ваше имя, а в текстовое поле Last Name - фамилию.
  • Щелкните на раскрывающемся списке объекта выбора даты и времени, и прокрутите его до вашей даты рождения.

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

    Ваша форма будет выглядеть примерно так.

  • Щелкните на кнопке Отобразить запись. Ваша программа сохраняет значения имени и фамилии в свойствах и использует метод Age для вычисления текущего возраста нового сотрудника. Появится диалоговое окно с результатом.

  • Чтобы закрыть это окно сообщения, щелкните на OK, а затем поэкспериментируйте с несколькими различными значениями дат, щелкая на Отобразить запись каждый раз, когда вы меняете значение поля даты рождения.
  • Когда вы закончите экспериментировать с вашим новым классом, щелкните на кнопке Закрыть. Вернется среда разработки.
  • Следующий шаг: наследование базового класса

    У меня есть еще один прием, касающийся классов, определенных пользователем, и наследования. Сейчас мы к нему перейдем. Точно так же, как при наследовании классов форм, вы можете наследовать обычные классы, которые вы сами определяете с помощью команды Add Class (Добавить класс) и модуля класса. Механизм наследования базового (родительского) класса состоит в использовании оператора Inherits, который включает ранее определенный класс в новый класс. Затем вы можете добавить в производный (дочерний) класс новые свойства или методы, которые будут отличать его от базового класса.

    В следующем упражнении вы измените проект My Person Class, добавив в модуль класса Person второй класс, определенный пользователем. Этот новый класс с именем Teacher будет наследовать от класса Person свойство FirstName, свойство LastName и метод Age, и будет добавлять свойство с именем Grade, в которое будет записываться уровень, на котором обучает новый учитель.

    Использование ключевого слова Inherits

  • Щелкните в Обозревателе решений на классе Person.vb, а затем щелкните на кнопке View Code (Просмотреть код).
  • Прокрутите Редактор кода вниз так, что текстовый курсор окажется стоящим после оператора End Class. Как упоминалось выше, вы можете включить в модуль класса более одного класса, при условии, что каждый класс отделен от остальных операторами Public Class и End Class. Вы создадите в этом модуле класса новый класс с именем Teacher, а для встраивания в него методов и свойств, определенных вами в классе Person, будете использовать ключевое слово Inherits.
  • Введите в Редактор кода следующее определение класса. (Введите операторы, выделенные ниже жирным шрифтом - Visual Studio автоматически добавит остальные операторы.)

    Public Class Teacher
    	Inherits Person
    	Private Level As Short
    
    	Public Property Grade() As Short
    		Get
    			Return Level
    		End Get
    		Set(ByVal Value As Short)
    			Level = Value
    		End Set
    	End Property
    End Class

    Оператор Inherits связывает класс Person с этим новым классом, встраивая в него все свои переменные, свойства и методы. Если бы класс Person находился в отдельном модуле или проекте, вы могли бы указать его расположение задав пространство имен, точно так же, как вы указываете классы библиотеки .NET Framework с помощью оператора Imports. По существу я определил класс Teacher как специальный тип класса Person - в дополнение к свойствам FirstName и LastName класс Teacher имеет свойство Grade, которое хранит уровень студента, обучаемого учителем. Теперь вы будете использовать этот новый класс в процедуре события Button1_Click.

  • Отобразите процедуру события Button1_Click формы Form1. Вместо создания новой переменной для хранения класса Teacher, я просто использую имеющуюся переменную Employee - единственное различие будет в том, что теперь я могу установить свойство Grade нового сотрудника.

  • Измените процедуру события Button1_Click в соответствии со следующим кодом. (Вводимые вами строки выделены жирным шрифтом.)

    Dim Employee As New Teacher
    Dim DOB As Date
    
    Employee.FirstName = TextBox1.Text
    Employee.LastName = TextBox2.Text
    DOB = DateTimePicker1.Value.Date
    Employee.Grade = InputBox("На каком уровне вы обучаете?")
    
    MsgBox(Employee.FirstName  "" Employee.LastName _
     "обучает на уровне " Employee.Grade)

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

  • Чтобы запустить программу, щелкните на кнопке Start (Начать).

    Примечание. Готовая программа Class Inheritance лежит в папке c:\vbnet03sbs\Гл.17\class inheritance.

    На экране появится форма для ввода данных о новом сотруднике.

  • Введите в текстовое поле Имя ваше имя, а в текстовое поле Фамилия - фамилию.
  • Щелкните на объекте выбора даты и прокрутите его до вашего дня рождения.
  • Щелкните на кнопке Отобразить запись. Ваша программа сохраняет значения имени и фамилии в свойствах, а затем отображает следующее окно ввода.

  • Введите 3, а затем щелкните на OK, чтобы закрыть окно ввода. Приложение сохраняет число 3 в новом свойстве Grade и использует свойства FirstName, LastName и Grade для отображения информации о новом сотруднике в подтверждающем окне сообщения. Вы увидите такое сообщение.

  • Если хотите, поэкспериментируйте еще с несколькими значениями, а затем щелкните на кнопке Закрыть формы. Программа остановится, и вернется среда разработки. Вы закончили работать с классами и наследованием в этой лекции.
  • Дальнейшие эксперименты с объектно-ориентированным программированием

    Если вам понравился этот экскурс в методики написания объектно-ориентированных кодов, то в Visual Basic .NET, который стал истинно объектно-ориентированным языком программирования, вас ожидает еще больше приятных моментов. В частности, вы можете добавить в ваше определение класса события, создать значения свойств по умолчанию и поэкспериментировать с новой функцией полиморфизма, которая называется перегрузкой методов. Эти и другие функции ООП можно изучить с помощью справочной системы Visual Basic или более продвинутых книг по программированию на Visual Basic .NET.

    Краткая справка по лекции 17

    Чтобы Сделайте следующее
    Наследовать интерфейс и функциональность существующей формы Щелкните на команде Add Inherited Form (Добавить производную форму) в меню Project (Проект), укажите имя производной формы, а затем щелкните на Open (Открыть). Для выбора наследуемой формы используйте Inheritance Picker (Выбор наследования), а затем щелкните на OK. Чтобы наследование было возможно, базовая форма должна быть скомпилирована в .exe- или .dll-файл. Если вы хотите наследовать от формы, которая не является компонентой текущего проекта, форма должна быть скомпилирована в .dll-файл.
    Настроить производную форму Добавьте в форму элементы управления Области элементов и установите свойства. Заметьте, что вы не можете установить свойства наследуемых объектов формы. Эти объекты могут быть обнаружены по маленьким значкам и будут неактивными.
    Создать собственные базовые классы Щелкните на команде Add Class (Добавить класс) в меню Project (Проект), укажите имя класса, а затем щелкните на Open (Открыть). С помощью кода программы определите класс в модуле класса.
    Объявить переменные класса

    Используйте ключевое слово Private, чтобы сделать ваши переменные скрытыми при изучении класса. Например:

    Private Name1 As String
    Создать в классе новое свойство

    Определите в классе открытую процедуру свойства. Например:

    Public Property FirstName() As String
    	Get
    		Return Name1
    	End Get
    	Set(ByVal Value As String)
    		Name1 = Value
    	End Set
    End Property
    Создать в классе новый метод

    Определите в классе процедуру Sub или Function. Например:

    Public Function Age(ByVal Birthday As Date) _
    As Integer
    	Return Int(Now.Subtract(Birthday).Days _
    / 365.25)
    End Function
    Объявить переменную объекта для использования в классе

    Используйте в операторе программы ключевые слова Dim и New, имя переменной и класс, определенный пользователем. Например:

    Dim Employee As New Person
    Установить свойства для переменной объекта

    Используйте обычный синтаксис для установки свойств объекта. Например:

    Employee.FirstName = TextBox1.Text
    Наследовать базовый класс в новом классе

    Создайте новый класс и используйте ключевое слово Inherits для встраивания определений базового класса. Например:

    Public Class Teacher
    	Inherits Person
    	Private Level As Short
    
    	Public Property Grade() As Short
    		Get
    			Return Level
    		End Get	
    		Set(ByVal Value As Short)
    			Level = Value
    		End Set
    	End Property
    End Class
    Вернуться к учебному плану