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