Классы в VB
Отличительной особенностью Visual Basic версий выше третьей состоит в том, что они позволяютпрограммисту создавать собственные классы. Создав класс, Вы получаете возможность испльзовать его как образец для объектов.Dim NMath As New clsNMath "Объявление объекта NMath класса clsNMath
Сразу скажу, что класс clsNMath мы создадим сами прямо сейчас.
Итак, начинаем создавать класс. Для этого добавим в проект новый модуль класса.Для этого нужно щёлкнуть правой кнопкой мыши в окне Project Explorer(Проводника проекта),и в появившемся меню выбрать подменю Add(Добавить), а в нём пункт Class Module(Модуль класса).Или исользуйте кнопку на панели инструментов.
В окне свойств нового модуля установите свойство Name(Имя), как clsNMath.
Теперь приступим к написанию кода. Если в вашем классе нет первой строки Option Explicit,настоятельно рекомендую написать её.
Дальше нам нужно создать внутреннюю структуру класса, а именно внутренние переменные.
Public OperandA As Double "Открытая переменная для хранения "первого операндаPublic OperandB As Double "Открытая переменная для хранения "второго операндаConst NM_PI = 3.14159265359
Сразу скажу, что объявление открытых переменных (оператор Public)равносильно созданию свойств с тем же именем. Другой способ создания свойств мы рассмотрим чуть позже.
Для создания следующей открытой переменной нам нужно создать перечисляемый тип
Public Enum ActionType Add "Сложить Substract "Вычесть Multiple "Умножить Divide "РазделитьEnd EnumPublic Action As ActionType "Открытая переменная "для хранения типа действия
В общем основная часть класса уже создана, осталось только задать свойство, которое будет выдавать ответ. Вот тут мы рассмотрим ещё один метод создания свойств; метод Property Let(Get,Set).
Задание свойства Property Get подобно созданию открытой функции с тем же именем. Отличие в том, что используя Property Let(Property Set)вы можете присваивать свойству значение, что недопустимо для функции.Работу Property иллюстрирует следующий код:
"Создание свойства Result только для чтения.Public Property Get Result () as Double"Результат зависит от типа действия.Select Case Action Case Add:Result = OperandA + OperandB Case Substract:Result = OperandA - OperandB Case Multiple:Result = OperandA * OperandB Case Divide:Result = OperandA / OperandB Case Else Err.Raise 200, , "Неизвестное действие" "Генерация ошибки Result = 0End SelectEnd Property
Теперь у класса есть свойство Result, которое возвращает результатвычисления. Это свойство (как было указано выше) только для чтения,т.е. ему нельзя присвоить значение.
Для демонстрации способа создания методов и функций создадим следующий код:
"Создаём метод Reset "сбрасывающий все переменныеPublic Sub Reset () OperandA = 0 OPerandB = 0 Action = Add "Действие по умолчанию - сложениеEnd Sub"Установим сброс при инициализации классаPrivate Sub Class_InitializeResetEnd Sub"Функция Random"Вычисляет "случайное" число Public Function Random (Optional Max As Double)"Аргумент Max - необязательныйIf Max = 0 Then Max = 1 "Установка Max по умолчаниюRandomize Timer "Переустановка генератора случайных чисел "по таймеру.Random = Rnd * MaxEnd Function "Функция PIPublic Function PI () As DoublePI = NM_PIEnd Fucntion
Итак класс clsNMath создан, остаётся сохранить изменения,и проверить работу. Для этого добавьте в проект форму и введите в неё код:
"В раздел объявления (Declarations)Private NMath As New clsMath"Не забудьте установить у формы свойство "AutoRedraw = TruePrivate Sub Form_Load ()Me.Print NMath.PIMe.Print NMath.Random(Nmath.Random(100))End SubPrivate Sub Form_Click ()NMath.OPerandA = InputBox("Первый операнд")NMath.OPerandB = InputBox("Второй операнд")NMath.Action = InputBox("Действие",,0)Me.Print NMath.ResultEnd Sub
В завершение скажу, что весь код проверен на моём компьютерена VB версии 5.0 Enterprise Edition.