CoderNotes - заметки программиста

Публикации  »  Visual Basic Scripting (VBS)
Скидка 65% на Skillbox

Получите скидку 65% на любой курс программирования на популярной образовательной платформе Skillbox!

Подробнее
Бесплатный хостинг + SSL-сертификат

Зарегистрируйте домен и получите 2 месяца бесплатного хостинга и SSL-сертификат на 1 год в подарок

Подробнее

Классы в VBS примеры

В языке 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

 

Категория: Visual Basic Scripting (VBS)

Комментарии к статье:

Пока комментариев нет, ваш будет первым ;)

Добавить комментарий: