В языке 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
Комментарии к статье:
Добавить комментарий: