В языке VBS можно использовать классы, правда не в полной мере, т.к. нет механизмов наследования и полиморфизма.
Пример объявления и использования класса в VBS:
Class MyClass Private MyAttr Public Sub Test1() MsgBox "тест1" End Sub Public Function Test2() MsgBox "тест2" Test2 = "значение" End Function End Class Dim myobj Set myobj = New MyClass myobj.Test1() MsgBox "Test2 вернул " & myobj.Test2()
В классах можно использовать конструкторы и деструкторы:
Class MyClass Private MyAttr Private Sub Class_Initialize() MsgBox "Конструктор" End Sub Sub Class_Terminate() MsgBox "Деструктор" End Sub End Class Dim myobj Set myobj = New MyClass ' Создаем класс myobj = 0 ' Разрушаем класс MsgBox "Завершение программы"
Конструктор вызывается при объявлении класса. Деструктор при разрушении класса, например, если присвоить переменной с классом другое значение. Деструктор так же будет вызван при завершении программы, если до этого класс еще не был разрушен.
Имитация наследования класса в VBS
Как было сказано выше, в VBS нет наследования классов, но ее можно имитировать. Для этого в классе-потомке нужно продублировать методы родительского класса, например, так:
' Родительский класс Class MyParentClass Public Sub Test1() MsgBox "тест1" End Sub Public Function Test2() MsgBox "тест2" Test2 = "значение" End Function End Class ' Класс-потомок Class MyChildClass Private parent Private Sub Class_Initialize() Set parent = New MyParentClass End Sub ' Дублирование родительских методов Public Sub Test1() parent.Test1() End Sub Public Function Test2() Test2 = parent.Test2() End Function ' Уникальный метод класса MyChildClass Public Sub Test3() MsgBox "тест3" End Sub End Class Dim myobj Set myobj = New MyChildClass myobj.Test1() MsgBox "Test2 вернул " & myobj.Test2() myobj.Test3()
Передача параметров в конструктор класса
Как было написано выше, в классах есть конструкторы и деструторы. Однако, есть ограничение их использования. В конструктор при инициализации нельзя передать никакие параметры. Обойти этот недостаток можно использовав вместо стандартного конструктора свой:
Class MyClass Public MyAttr Public Sub Test1() MsgBox MyAttr End Sub End Class ' Функция заменяющая стандартный конструктор Function NewMyClass(Param1) Dim myobj Set myobj = New MyClass ' Здесь начинаются действия нашего конструктора по "инициализации" класса myobj.MyAttr = Param1 ' Действия закончились, теперь возвращаем экземпляр класса Set NewMyClass = myobj End Function Dim myobj Set myobj = NewMyClass("Тест") myobj.Test1() ' вызываем метод Test1, чтобы убедиться, что инициализация класса была выполнена
Контроль значений, передаваемых и возвращаемых в свойствах класса
При установлении или возвращении свойства класса можно предварительно выполнять различные действия по контролю их правильности или по их модификации. Осуществляется это с помощью Property Let и Property Get. Следующий пример это демонстрирует:
Class MyClass Private i_MyAttribute Public Property Let MyAttribute(byVal Param1) Param1 = "1" & Param1 ' действия перед записью значения i_MyAttribute = Param1 End Property Public Property Get MyAttribute value = i_MyAttribute & "2" ' действия перед возвращением значения MyAttribute = value End Property End Class Dim myobj Set myobj = New MyClass myobj.MyAttribute = "тест" MsgBox myobj.MyAttribute
Включение в программный код других файлов (include)
Классы можно описывать в отдельных файлах, тем самым инкапсулируя (объединяя) логику и данные одного вида в отдельный класс-файл. Однако, встает проблема: как подключать эти файлы в общий программный код? Чтобы включить в код другой файл, можно воспользоваться executeGlobal и чтением файлов. Для демонстрации имитации include, ниже приведу текст двух файлов, по которым всё будет понятно.
Текст файла MainProgram.vbs (основная программа)
Call IncludeFile("MyClass.vbs") Dim myobj Set myobj = New MyClass myobj.Test1() MsgBox "Test2 вернул " & myobj.Test2() ' Функция для включения в код других файлов Sub IncludeFile(fname) executeGlobal CreateObject("Scripting.FileSystemObject").openTextFile(fname).readAll() End Sub
Текст файла MyClass.vbs (подключаемый файл с классом)
Class MyClass Private MyAttr Public Sub Test1() MsgBox "тест1" End Sub Public Function Test2() MsgBox "тест2" Test2 = "значение" End Function End Class
Комментарии к статье:
Добавить комментарий: