Урок 8 по VBScript: Объекты и классы

Урок 8 по VBScript: Объекты и классы Программирование на VBSCRIPT

Всем привет, в данной статье мы подробно изучим работу с внешними объектами в vbscript сценариях и научимся создавать собственные классы. Для начала, давайте по порядку. Под объектом мы будем рассматривать некую библиотеку (в большинстве случаев это внешний файл с расширением dll), которая содержит методы и свойства для выполнения тех или иных задач (работа с файловой системой, создание форм и так далее).

Объекты и классы vbsКлассы – это тоже своеобразные vbscript объекты, но, они немного отличаются от тех объектов, какие мы создавали на языке jscript, далее, по ходу статьи я покажу, в чем заключаются различия.

И так, давайте для начала рассмотрим, как происходит подключение в vbscript внешних объектов. Для этого используются две функции:

CreateObject( servername.typename[, location ] ) — Создаёт экземпляр объекта-сервера автоматизации и возвращает ссылку на него. Здесь servername — имя приложения, являющегося сервером; typename — тип или класс; location — сетевое имя компьютера.

В большинстве случае, достаточно указать только servername.typename, например:

Dim FSO, WSO
Set FSO = CreateObject("Scripting.FileSystemObject")
Set WSO = CreateObject("Scripting.WindowSystemObject")

Как видим, сначала нужно объявить переменную, далее мы используем ключевое слово Set после которого следует наша переменная. После того, как мы создали ссылку на нужный объект в vbscript сценарии, к нему можно будет обратиться уже через имя переменной.

GetObject([pathname] [, classname] ) — Возвращает ссылку на объект класса classname, который хранится в отдельном файле, путь к которому задает параметр pathname.

Как правило, данная функция, используется при работе с Windows Management Instrumentation:

Dim objService
Set objService = GetObject("WinMgmts:\\.\Root\CIMV2")

Тут мы подключаемся к пространству имен CIMV2.

В какой-то момент, может отпасть надобность использовать vbscript объекты, что бы освободить на них ссылку, используется ключевое слово Nothing:

Set FSO = Nothing
Set WSO = Nothing
Set objService = Nothing
Объекты и классы vbs

Хорошо, но вы, возможно скажете, а нельзя ли определить собственные объекты vbscript в теле сценария? Конечно можно, только называться они будут классами. Общий синтаксис при создании класса vbs таков:

Class <имя>
     Методы и свойства
End Class

Как видим, всё в принципе просто, хорошо, давайте создадим свой первый класс (объект) vbscript:

'****************************************
' Простой (класс) объект vbscript
' class.vbs
'****************************************
dim my_class
 
' Создаём класс new_class
Class new_class
Dim my_arr(3), a,b
     Function my_fun(x,y)
                 my_fun=x+y
     End Function
End Class
 
' создаём ссылку на экземпляр vbs класса new_class
set my_class = new new_class
 
'Заполняем свойства
my_class.my_arr(0) = 10
my_class.my_arr(1) = "строка"
my_class.my_arr(2) = #10/10/2000#
my_class.my_arr(3) = 1.32
 
my_class.a = 200
my_class.b = 500
 
MsgBox my_class.my_arr(2)
MsgBox my_class.my_fun(10,100)
Конструкция для создания vbs класса

Тут мы сначала создали объект my_class, в нём мы прописали одну функцию, две переменные и один массив. Далее, мы создали ссылку на наш объект vbscript через переменную new_class. Фактически, теперь мы взаимодействуем не с самим классом, а с его копией. Что бы не писать лишние строки кода при заполнении свойств, можно прибегнуть к помощи одной конструкции.

Скачать архив с примерами

With … End With — Позволяет обращаться к свойствам объекта vbscript без написания его имени, например:

with my_class
     .my_arr(0) = 10
     .my_arr(1) = "строка"
     .my_arr(2) = #10/10/2000#
     .my_arr(3) = 1.32
     ...............................................
     .a = 200
     .b = 500
end with

Давайте далее, для членов классов vbs в языке vbscript есть следующие ключевые слова:

Private – видимость только внутри кода для заданного класса vbs.

Public – доступность как внутри, так и снаружи (значение присуще по умолчанию).

Также, если переменной нужно присвоить значения сразу в теле класса, то можно использовать функцию Property Get, её синтаксис следующий:

Property Get имя переменной
            Имя переменной=значение
End Property

Хотя по правде, есть и другие функции, однако, если их сейчас описывать, то это лишь запутает ситуацию, поэтому, давайте пока посмотрим на следующий пример:

'****************************************
' Пример простого vbs класса
' class_1.vbs
'****************************************
dim my_class
 
' Создаём класс new_class
Class new_class
 
     ' глобальная видимость
     dim a
     ' Локальная видимость
     Private b
     ' только чтение
     Property Get c
                 c=100
     End Property
 
     Function my_fun(x,y)
                 my_fun=x+y
     End Function
End Class
 
' создаём ссылку на экземпляр vbs класса new_class
set my_class = new new_class
 
' Возникнет ошибка
MsgBox my_class.b
 
'Заполняем свойства
with my_class
     .a = 200
     ' Возникнет ошибка
     .b = 500
     ' Возникнет ошибка
     .c = 300
end with
MsgBox my_class.c
White wend служит для доступа к свойствам объекта vsb

Данный пример демонстрирует, как ведут себя те или иные ключевые слова или функции в теле vbscript объекта (класса). Данная статья была лишь кратким знакомством с классами и объектами языка vbscript.

Оцените статью
Технологии программирования и ведение блога
Добавить комментарий