Loading AI tools
язык программирования Из Википедии, свободной энциклопедии
Microsoft Visual Basic — язык программирования, а также интегрированная среда разработки программного обеспечения, разрабатываемые корпорацией Microsoft. Язык Visual Basic унаследовал дух, стиль и отчасти синтаксис своего предка — языка BASIC, у которого есть немало диалектов. В то же время Visual Basic сочетает в себе процедуры и элементы объектно-ориентированных и компонентно-ориентированных языков программирования. Интегрированная среда разработки VB включает инструменты для визуального проектирования пользовательского интерфейса, редактор кода с возможностью IntelliSense и подсветкой синтаксиса, а также инструменты для отладки приложений.
Visual Basic | |
---|---|
![]() | |
Класс языка | Процедурный, Объектно-ориентированный, Компонентно-ориентированный, Событийно-ориентированный |
Тип исполнения | Компилируемый, Интерпретируемый |
Появился в | 1991 |
Разработчик | Майкрософт |
Расширение файлов |
.bas, .cls, .frm, .vbp, .vbg |
Выпуск | Visual Basic 6.0 (1998 ) |
Система типов | Статическая типизация, Строгая типизация, Динамическая типизация |
Основные реализации | Microsoft Visual Studio |
Диалекты | Visual Basic for Applications, Visual Basic Script |
Испытал влияние | QuickBasic, BASIC |
Повлиял на | Visual Basic .NET, REALbasic, Gambas, Xojo, Basic4ppc |
Сайт | msdn.microsoft.com/ru-RU/vstudio/ms788229.aspx |
Платформа | Windows |
![]() |
Visual Basic также является хорошим средством быстрой разработки (RAD) приложений баз данных для операционных систем семейства Microsoft Windows. Множество готовых компонентов, поставляемых вместе со средой, призвано помочь программисту сразу же начать разрабатывать бизнес-логику бизнес-приложения, не отвлекая его внимание на написание кода запуска программы, подписки на события и другие механизмы, которые VB реализует автоматически.
Первое признание серьёзными разработчиками Visual Basic получил после выхода версии 3. Окончательное признание как полноценного средства программирования для Windows — при выходе версии 5. Версия VB6, входящая в состав Microsoft Visual Studio 6.0, стала по-настоящему зрелым и функционально богатым продуктом.
Дата выпуска | Версия | Описание |
---|---|---|
Май 1991 | 1.0 | Visual Basic 1.0 для Microsoft Windows. За основу языка был взят синтаксис QBasic, а новшеством, принесшим затем языку огромную популярность, явился принцип связи языка и графического интерфейса. Этот принцип был разработан Аланом Купером (Alan Cooper) и реализован в прототипе Tripod (также известном как Ruby) |
Сентябрь 1992 | 1.0 | Visual Basic 1.0 под DOS. Он не был полностью совместим с Windows-версией VB, поскольку являлся следующей версией QuickBASIC и работал в текстовом режиме экрана. Интересно отметить, что в составе была специальная утилита, которая конвертировала проекты данной версии в проекты Visual Basic 1.0 для Windows. Она делала код максимально совместимым с Windows-версией, конвертировала формы (хотя результат получался неудовлетворительным из-за различий текстового и графического режима), а также давала в коде комментарии с подсказками по дальнейшему улучшению. |
Ноябрь 1992 | 2.0 | Visual Basic 2.0. Среда разработки стала проще в использовании и работала быстрее. Окно «Свойства» переместилось в отдельный список. Добавлена подсветка исходного кода. |
1993 | 3.0 | Вышел в свет Visual Basic 3.0 в версиях Standard и Professional. Ко всему прочему, в состав поставки добавился движок для работы с базами данных Access. |
Август 1995 | 4.0 | Visual Basic 4.0 — версия, которая могла создавать как 32- так и 16-разрядные Windows-приложения. Кроме того, появилась возможность писать на VB классы, а также Visual Basic наконец-то стал полноценным компилятором, что значительно увеличило скорость выполнения программ. Добавлена поддержка OLE Controls (OCX), взамен старым элементам управления VBX[англ.] |
Февраль 1997 | 5.0 | Visual Basic 5.0 — начиная с этой версии, стало возможно, наряду с обычными приложениями, разрабатывать свои COM-компоненты. Скомпилировав такой компонент в OCX-файл и поставляя его, можно было предоставить свой объект управления не только конечному пользователю, но и другим разработчикам, после чего они могли интегрировать этот объект в свои приложения. В составе с интегрированной средой входят P-Code и Native компиляторы. Исполнением приложений занимается новая виртуальная машина реализованная в динамической библиотеке MSVBVM50.DLL. Также в 1 квартале этого года, Microsoft выпускает продукт в специальной редакции Visual Basic 5 Control Creation Edition (VB5CCE), который специализируется только над проектированием ActiveX элементов управления. |
Середина 1998 | 6.0 | Visual Basic 6.0 — Оптимизирована работы виртуальной машины и вынесена в MSVBVM60.dll. Улучшена работа Native-компилятора. Добавлены новые функции для работы со строками и массивами. Данная версия языка является последней в линейке классического VB. Microsoft изменила политику в отношении языков семейства Basic и вместо развития Visual Basic, был создан абсолютно новый язык Visual Basic .NET. |
2002 | 7.0 | Первый выпуск Visual Basic .NET. Наиболее важная особенность заключается в том, что код полностью управляем платформой .NET Framework Common Language Runtime. Нарушена обратная совместимость с классической версией Visual Basic (которая застыла как VB6). |
Апрель 2003 | 7.1 | Microsoft модернизировала Visual Basic .NET, оптимизировала работу компилятора. Выпущен совместно с обновлённой версией .NET Framework 1.1. |
2005 | 8.0 | Входит в состав Visual Studio 2005. Требует .NET Framework 2.0. После выхода Visual Basic .NET 2003, Microsoft убрала приставку «.NET» из названия продукта и следующая версия называется Visual Basic 2005. |
2008 | 9.0 | Входит в состав Visual Studio 2008. Требует .NET Framework 3.5 |
2010 | 10.0 | Входит в состав Visual Studio 2010. Требует .NET Framework 4 |
2012 | 11.0 | Входит в состав Visual Studio 2012. Требует .NET Framework 4.5 |
2013 | 12.0 | Входит в состав Visual Studio 2013. Требует .NET Framework 4.5.1 |
2015 | 14.0 (не вышел под номером 13.0) | Входит в состав Visual Studio 2015. Обновлен .NET Framework до версии 4.6 |
2017 | 15.0 | Входит в состав Visual Studio 2017. |
После выхода Visual Basic версии 6.0 разработчики из Microsoft существенно изменили направление развития данной технологии. Visual Basic .NET не позволяет программировать по-старому, потому что по сути является совершенно другим языком, таким же, как и любой другой язык программирования для платформы .NET. Индивидуальность языка, так же как и его преимущества (простота, скорость создания программ, лёгкость использования готовых компонентов) при использовании в среде .NET не имеют такого значения, как раньше — всё сосредоточено на возможностях самой платформы .NET, на её библиотеках классов. На данный момент (июнь 2015) нужно говорить о Visual Basic, как о классических версиях языка 4.0 — 6.0, его диалектах: Visual Basic for Applications (VBA) и Visual Basic Scripting Edition (VBScript) и о языке для платформы .NET — Visual Basic .NET.
В марте 2020 года Microsoft заявила, что будет поддерживать Visual Basic в унифицированной платформе .NET 5.0, но больше не будет добавлять новые функции или развивать этот язык[1][2].
Переменные в Visual Basic объявляются оператором Dim
, после которого указывается имя, затем - ключевое слово As
и тип переменной. Если тип опущен, то ключевое слово As
не указывается и переменная объявляется как Variant. Если не указать конструкцию Option Explicit
в разделе деклараций, то явного объявления переменных не требуется и они автоматически будут созданы при первом использовании. Данное поведение может привести к снижению скорости выполнения программы, так как необъявленные переменные будут иметь тип Variant, а также возможны логические ошибки, связанные с неверным вводом имени имеющейся переменной или риска конфликтов в приложении, когда область определения переменной не совсем ясна.
Dim strMessage As String 'объявление переменной символьного типа
Dim iProductCount As Integer 'объявление переменной целочисленного типа
Dim dt70YearsOfVictory As Date 'объявление переменной для хранения даты и времени
Dim otherValue ' тип не указан, переменная типа Variant
Public Sub Main()
strMessage = "Привет, Мир!"
iProductCount = 125
dt70YearsOfVictory = #5/9/2015 2:00:00 PM# ' дата 9 мая 2015 14:00:00
otherValue = 12.5 ' тип переменной Variant, подтип Double.
otherValue = "Википедия" ' тип переменной Variant, подтип String.
End Sub
Таблица основных типов Visual Basic 6.0
Наименование | Размер типа | Описание типа данных |
---|---|---|
Byte | 1 байт | Байт. Предназначен для хранения целых чисел от 0 до 255. Если переменной такого типа присвоить значение, выходящее за эти пределы, то Visual Basic сгенерирует ошибку времени выполнения. |
Integer | 2 байта | Целое. Предназначен для хранения целых чисел в диапазоне −32 768 до 32 767. Суффикс для обозначения типа «%». |
Long | 4 байта | Длинное целое. Предназначен для хранения целых чисел в диапазоне −2 147 483 648 до 2 147 483 647. Суффикс для обозначения типа «&». |
Single | 4 байта | С плавающей точкой одинарной точности. Диапазон от -3,402823E38 до -1,401298E−45 для отрицательных значений; от 1,401298E−45 до 3,402823E38 для положительных значений. Суффикс для обозначения типа «!» |
Double | 8 байт | С плавающей точкой двойной точности. Переменные этого типа позволяют хранить числа с точностью до 16 цифр и длиной до 300 символов. Диапазон значений варьируется от −1.80E+308 до 1.80E+308. Суффиксом является «#». Вычисления с ним являются приблизительными, так как используется бинарное представление числа согласно стандарта IEEE 754. |
Decimal | 16 байт | Масштабируемое целое. Этот тип использует десятичное представление чисел. Вычисления с ним, также как с типом Currency являются точными. Диапазон значений от −7.92E+28 до 7.92E+28. Нельзя напрямую объявить переменную с типом Decimal. Он может использоваться только как подтип для Variant и переменную можно привести к данному типу с помощью функции кастования CDec . |
Boolean | 2 байта | Булев тип данных может хранить только два значения: True либо False, истина или ложь. Истинное значение в VB соответствует целочисленной −1, а ложь равна 0, а при неявном приведении типа, любое численное значение отличное от нуля рассматривается как истина. Такое поведение позволяет использовать логические операторы AND , OR , NOT , XOR не только для булевой алгебры, но также и для битовых операций.[3] |
String | 10 + 2*N байт | Строка переменной длины. Предназначен для хранения строковой (символьной) информации. Сама строка хранится в кодировке Unicode, поэтому каждый символ кодируется 2 байтами. Если посмотреть тип изнутри, то используется дополнительно 4 байта для хранения указателя на строку, 4 байта для размера строки, а сама строка завершается нуль-символами (ещё 2 байта). Таким образом максимальный размер строки может достигать до 2 Гбайт. Суффикс типа «$». |
String*N | 2*N байт | Строка постоянной длины. Также как и тип String хранит символьные данные, за исключением того, что размер данных фиксированный и указывается при объявлении переменной. Если значение строки слишком большое, то она усекается до необходимого размера. Если строка меньше чем требуется, то происходит выравнивание размера добавлением символа «пробела». Следует заметить, что фиксированные строки и массивы, а также структуры не могут быть больше 64 кб. |
Date | 8 байт | Тип данных позволяет хранить значения времени и даты в промежутке от полуночи 1 января 100 года до полуночи 31 декабря 9999 года. Если переменной присвается только значение даты, то время равняется 00:00. Целочисленная единица представляет собой одни сутки. Это позволяет добавлять и вычитать даты используя только математические операторы, но для выполнения этих целей VB предоставляет специализированные функции работы с датами. |
Object | 4 байта | Используется для хранения ссылки на объект. Присваивание переменной для этого типа происходит с помощью оператора Set . Сам тип является аналогом IDispatch, в нем хранится ссылка на интерфейс IDispatch. Для любого объекта нужно использовать IUnknown. |
Currency | 8 байт | Денежный. Данный тип может иметь до 4 цифр после запятой, и до 14 — перед ней. Значение представляют собой числа в десятичной системе счисления, а не в двоичной, как это происходит для типов с плавающей запятой одинарной и двойной точности. Таким образом вычисления будут произведены точно. Диапазон значений от −922 337 203 685 477,6000 до 922 337 203 685 477,6000. Данный тип является предпочтительным для проведения финансовых расчетов. Суффикс «@» |
Variant | 16 байт / 22 байта+N байт / N-байт | Переменная типа Variant может содержать данные любого типа, включая ссылки на объекты, пользовательские типы и массивы. Visual Basic автоматически производит необходимые преобразования данных. Подтип содержащий число требует 16 байт памяти, а для хранения строковых данных 22 байта + длина самой строки. Диапазон значений равен диапазону значений подтипа. Данный тип самый медленный по скорости выполнения, так как требуется время на распаковку и упаковку значений. |
Язык Visual Basic содержит множество операторов, которые отвечают за арифметические операции, операции сравнения и присвоения, а также конкатенации.
Оператор присвоения
Let
перед именем переменной. В ранних версиях языка BASIC его наличие было обязательным, но в Visual Basic он оставлен для совместимости. Для присвоения переменной объектного типа, необходимо наличие ключевого слова Set
. Примеры: nVar = 10
, Let iCount = 20
, Set refDouble = objClass
.Многократное присваивание, так как это реализовано в языке C, невозможно. A = B = C
не означает, что A
, B
и C
будут иметь равные значения. VB оценит выражение B = C
и в переменную A
присвоит результат True
или False
, 0 или −1, в зависимости от типа.
Арифметические операторы
2 ^ 3 = 8
5 \ 2 = 2
5 Mod 2 = 1
Операторы сравнения
If nVar = 10 Then
If nVar > 10 Then
If nVar >= 10 Then
If nVar <> 10 Then
If obj1 Is obj2 Then
If strEmail Like "*@*.*" Then
Логические операторы
If (2 * 2 = 4) And (2 * 3 = 6) Then
If (2 * 2 = 5) Or (2 * 2 = 4) Then
True
, если условие ложно и наоборот. Пример: If Not(2 * 2 = 5) Then
E1 Xor E2
возвращает True
, если только E1 = True
или только E2 = True
, иначе — False
.True
, если они имеют одинаковое значение.False
, если E1 = True
и E2 = False
, иначе — True
.Операторы конкатенации
str = "10" & 20
даёт результат «1020», а не «30». Если бы использовали оператор (+) в данном выражении, то VB привел бы выражение «10» к числовому типу 10, и в случае успеха, произвёл бы арифметическое сложение.В Visual Basic, как и во многих языках программирования, существуют конструкции, предназначенные для управления порядком выполнения действий. Некоторые из конструкций, такие как GoSub
и Return
, оставлены для совместимости с ранними версиями языка BASIC, но реализация в виде отдельных процедур может обеспечить более структурированный код.
Общий синтаксис:
'Запись оператора ветвления в одну строку
If <условие> Then [действие_когда_условие_истинно]
'Такая запись позволит выполнить действия в зависимости от истинности условия
If <условие> Then [действие_когда_условие_истинно] Else [действие_когда_условие_ложно]
'Запись оператора ветвления в несколько строк
If <условие> Then
[действие_когда_условие_истинно]
ElseIf <условие2> Then
[действие_когда_условие2_истинно]
ElseIf <условиеN> Then
[действие_когда_условиеN_истинно]
Else
[действие_когда_условие_ложно]
End If
Общий синтаксис:
Select Case <проверяемое_значение> 'Переменная или выражение, которое требуется проверить по одному или нескольким условиям
Case <значение_1> 'Выполняется действие, если проверяемое значение будет соответствовать значению 1
[действие_1]
Case <значение_2>, <значение_3>, <значение_3> 'Проверяет список значений. Если найдено соответствие, то выполняется действие
[действие_2]
Case <значение_5> To <значение_6> 'Проверяет диапазон значений
[действие_3]
Case Is >= <значение_7> 'Проверяет значение на истинность с условием
[действие_4]
Case Else 'Выполняется действие, если ни одно из условий не выполнится
[действие_5]
End Select
Пример: вывод различных сообщений в зависимости от значения переменной
'Введём переменную и дадим ей значение вручную
Dim X As Double
X = InputBox("Введите числовое значение переменной Х")
Select Case X 'Проверим, подходит ли некоторой воображаемой функции наше значение
Case Is < 5, Is >= 20, 12 To 15 'Диапазон подходящих значений
MsgBox "Действительное значение для некоторой функции"
Case Else 'Не подходящие значения
MsgBox "Значение не может быть использовано в некоторой функции"
End Select
Общий синтаксис:
For <переменная> = <значение> To <конечное_значение> [Step <шаговое_значение>]
[блок_операторов]
[Exit For] 'Выход из цикла
Next [переменная]
Пример: подсчёт суммы чётных чисел от 1 до 100
For I = 0 To 100 Step 2
Sum = Sum + I
Next
Общий синтаксис:
For Each <переменная> In <коллекция>
[блок_операторов]
[Exit For] 'Принудительный выход из цикла
Next [переменная]
Пример: выводит на экран каждый элемент из массива
Dim strItem As Variant
For Each strItem In Array("Яблоко", "Груша", "Слива")
Print strItem
Next
Общий синтаксис:
Do While <условие> 'Цикл выполняется, когда условие истинно
[блок_операторов]
[Exit Do] 'Принудительный выход из цикла
Loop
Do Until <условие> 'Цикл выполняется, когда условие ложно
[блок_операторов]
[Exit Do]
Loop
While <условие> 'Цикл выполняется, когда условие истинно
[блок_операторов]
Wend
Пример: Построчное чтение текстового файла
Open "file.txt" For Input As #1
Do While Not EOF(1) 'Возвратит True, если ожидается конец файла
Line Input #1, strBuffer 'Чтение строки в переменную
Debug.Print strBuffer 'Вывод в окно отладки
Loop
Close #1
Общий синтаксис:
Do
[блок_операторов]
[Exit Do]
Loop While <условие>
Do
[блок операторов]
[Exit Do]
Loop Until <условие>
Подпрограммы являются одними из основных элементов языка. Они представляют собой процедуры и функции.
Sub
и заканчивается End Sub
, между которыми и помещается код. Процедуры могут вызываться или самим Visual Basic, например, реализованные в виде обработчиков событий, или другими процедурами и функциями. Имя процедуры обработки события состоит из имени объекта, знака подчёркивания и имени события:Private Sub Command1_Click() 'Событие будет вызвано при нажатии на элемент управления "Кнопка"
...
End Sub
Private Sub Form_MouseMove(Button As Integer, Shift As Integer, X As Single, Y As Single) 'Вызывается при перемещении указателя мыши в окне формы
...
End Sub
На самом деле Visual Basic реализует цикл обработки оконных сообщений Windows. В примере с формой, цикл отфильтрует сообщение WM_MOUSEMOVE
и автоматически вызовет процедуру Form_MouseMove
с параметрами: какие кнопки мыши были нажаты, координаты указателя. Данный механизм скрывает от разработчика некоторые аспекты программирования в среде Windows, позволяя ему сразу приступить к написанию коммерческого кода. В большинстве случаев, класс решаемых задач не потребует от программиста знаний о сообщениях и оконных функциях. Но Visual Basic не ограничивает программиста самому реализовать обработку оконных сообщений. Это позволяет очень гибко подходить к построению приложений, но и потребует достаточного опыта для написания подобного кода, который может вызвать нестабильную работу программы вплоть до аварийного завершения.
Function
и заканчиваются End Function
. Возвращаемое значение функции присваивается переменной, совпадающее с названием функции. Для того, чтобы досрочно прервать выполнение процедуры или функции, существуют специальные операторы Exit Sub
и Exit Function
. Visual Basic 6.0 содержит встроенные функции для работы с файловой системой, датой и временем, математические функции, функции взаимодействия с системой, функции для работы со строками, функции приведения типов и функции осуществляющие финансовые расчёты. Также существуют недокументированные функции, которые позволяют работать, например, с указателями.Пример функции для решения квадратного уравнения:
Private Sub Main()
Dim RetX1 As Double, RetX2 As Double
Dim strStatus As String
strStatus = SolveQuadraticEquation(4, 6, 2, RetX1, RetX2) 'Решение уравнения 4*X^2 + 6*X - 2 = 0
'Выводим ответ
MsgBox "Решение: " & strStatus & vbCrLf & _
"X1 = " & RetX1 & vbCrLf & _
"X2 = " & RetX2, vbInformation
End Sub
'Функция решения квадратного уравнения
Public Function SolveQuadraticEquation(ByVal A As Double, _
ByVal B As Double, _
ByVal C As Double, _
ByRef X1 As Double, _
ByRef X2 As Double) As String
Dim D As Double
D = (B * B) - (4 * A * C) 'Получаем значение дискриминанта
If D >= 0 Then
X1 = (-B - Sqr(D)) / (2 * A) 'Вычисляем корни уравнения
X2 = (-B + Sqr(D)) / (2 * A)
SolveQuadraticEquation = "Решение получено" 'Функция возвращает сообщение о решении
Else
SolveQuadraticEquation = "Дискриминант < 0. Корней нет"
End If
End Function
В этом примере можно заметить модификатор ByVal
перед аргументами A
, B
и C
. Это способствует тому, что параметры в функцию будут переданы по значению. Модификатор ByRef
, напротив, передаёт значение по ссылке. Для такого типа модификатора, функция может модифицировать значения переменных, переданных в качестве параметров. Visual Basic по-умолчанию всегда передаёт значения по значению ByVal
[4], если ни один из модификаторов не был указан.
Программный код в Visual Basic хранится в модулях. Существуют всего три вида модулей: модуль формы (Form), стандартный модуль (Module) и модуль класса (Class Module).
Class_Initialize
и Class_Terminate
, которые фактически являются конструктором и деструктором.Простое взаимодействие между объектами является одним из базовых составляющих парадигмы Visual Basic. Сам объект называют экземпляром класса. Объектная модель VB предоставляет различные классы для работы с формами, элементами управления, буфером обмена, коллекциями, экраном и т. д. Для взаимодействия с другими объектами класс предоставляет разработчику интерфейс, состоящий из свойств, методов и событий.
Создание нового объекта из класса возможно ранним или поздним связыванием. Для раннего связывания используется ключевое слово New
перед именем класса. Для позднего связывания используется функция CreateObject
, возвращающая ссылку на созданный объект. Присваивание ссылок осуществляется в переменные с типом Object
, используя оператор Set
. Доступ к методам и свойствам класса происходит через оператор точку .
, который ставится сразу после имени переменной объектного типа. Если класс содержит события, то переменные объявляются с ключевым словом WithEvents
, тем самым будут доступны процедуры обработки событий.
Пример показывает взаимодействие программы с библиотекой Microsoft Scripting Runtime, предоставляющей объекты для работы с файловой системой:
Public Sub Main()
Dim objFSO As New FileSystemObject 'Создаём экземпляр класса, используя оператор New
Dim objWindows As Folder
Set objWindows = objFSO.GetFolder(Environ("SYSTEMROOT")) 'Вызываем метод класса GetFolder и присваиваем ссылку на полученный объект
MsgBox "Папка Windows: " & objWindows.Path 'Читаем свойства класса
MsgBox "Дата создания: " & Format(objWindows.DateCreated, "YYYY-MM-DD H:mm:ss")
Dim sTextFilePath As String
Dim objTS As TextStream
sTextFilePath = objFSO.BuildPath(Environ("TEMP"), "Тестовый файл.txt") 'Метод с двумя параметрам возвращает значение типа String
Set objTS = objFSO.CreateTextFile(sTextFilePath, True)
objTS.Write "Привет, Википедия!"
objTS.Close
objFSO.DeleteFile sTextFilePath, True
Set objFSO = Nothing 'Присваивая Nothing, происходит освобождение ссылки, и объект может вызвать процедуру деструктора
Set objWindows = Nothing 'VB автоматически вызывает деструктор, если на объект больше не ссылаются
Set objTS = Nothing
End Sub
Visual Basic позволяет разработчику самому создавать новые классы. В отличие от других языков программирования, таких как Java и C++, Visual Basic имеет неполную поддержку ООП.
Как известно, абстрактный класс необходим, чтобы предоставить шаблон для интерфейса другим классам. В Visual Basic классы имеющие члены класса, но не содержащие реализацию, можно использовать в качестве абстрактных классов, но фактически они ими не являются. Из классов Visual Basic всегда можно создать объекты, даже если они не содержат кода[5]
Принцип инкапсуляции действует в Visual Basic. Чтобы разграничить доступ к членам класса, служат модификаторы Public
, Private
и Friend
, используемые при описании процедур, функций, констант, переменных и пользовательских типов.
Наследование реализации не поддерживается. Visual Basic обеспечивает только поддержку наследования интерфейса через оператор Implements
. При наследовании интерфейса любой класс может действовать как базовый класс интерфейса. Вообще любой класс, может выступать как базовый класс интерфейса.
Полиморфизм обеспечивается только через интерфейсы, так как наследование VB не поддерживает. Реализация полиморфизма показана на примере классов Автомобиль и Самолёт реализующие интерфейс класса Транспорт.
'Класс ITransport.cls
Public Function GetMaxSpeed() As Long
End Function
'Класс CAuto.cls
Implements ITransport 'Наследуем интерфейс
Private Function ITransport_GetMaxSpeed() As Long 'Реализация метода
ITransport_GetMaxSpeed = 240
End Function
'Класс CFly.cls
Implements ITransport
Private Function ITransport_GetMaxSpeed() As Long
ITransport_GetMaxSpeed = 700
End Function
'Стандартный модуль Program.bas
Option Explicit
Public Sub Main()
Dim T As ITransport 'Объявляем переменную с типом ITransport
Set T = New cAuto
WhatTransportSpeed T 'Передаем ссылку в процедуру, которая вызовет нужный метод класса, в зависимости от реализации
Set T = New cFly
WhatTransportSpeed T
End Sub
'Функция имеет аргумент, который принимает ссылку на объект, реализующий интерфейс ITransport
Public Sub WhatTransportSpeed(Transport As ITransport)
MsgBox "Максимальная скорость: " & Transport.GetMaxSpeed()
End Sub
![]() | Этот раздел не завершён. |
![]() | Этот раздел не завершён. |
Редактор кода представляет собой текстовый редактор с дополнительными функциями для простого и быстрого ввода исходного кода:
Интегрированная среда разработки предоставляет программисту богатые возможности для отладки программ. Одно из преимуществ Visual Basic, заключается в возможности изменять в значительной мере исходный код программы без её полной перекомпиляции и перезапуска. Во время отладки процедур, разработчику предоставляется возможность перемещать маркер, указывающий на текущую выполняемую инструкцию, как вперёд — пропуская часть кода, так и назад — заставляя VB заново исполнять уже отработанные инструкции.
Кроме всего прочего, среда предоставляет инструменты для отладки, такие как окно немедленного выполнения (Immediate Window), окно локальных переменных (Locals Window), окно наблюдения (Watch Window), окно просмотра стека вызовов процедур (Call Stack). Такие продвинутые средства позволяют программисту проводить глубокий анализ исследуемого алгоритма в отлаживаемом приложении.
Visual Basic переходит в режим отладки при выполнении одного из условий:
Stop
Ctrl + Break
В комплекте с интегрированной средой разработки идёт компилятор в P-Code (P-код), нативный Back-End x86-совместимый компилятор и связной (линковщик). Наличие двух компиляторов позволяет отнести Visual Basic как компилируемому, так и интерпретируемому языку. Вне зависимости от того, какой из компиляторов будет выбран, приложения требуют для своего запуска виртуальную машину времени выполнения Visual Basic, которая представляет собой библиотеку MSVBVMXX.DLL, где XX — версия языка[6]
Совместно с Microsoft Visual Basic 6.0 поставляется Package & Deployment Wizard[7], предназначенный для создания установочных пакетов на основе проекта Visual Basic. В сравнении со своим хорошо известным предшественником — Setup Wizard, P&D Wizard предоставляет новую функциональность, но, к сожалению, новый инструмент содержит некоторые ошибки. Одной из проблем данного приложения является ошибка преобразования даты, если локаль установленная в операционной системе пользователя будет отличной от американской. Существуют сторонние приложения, которые предоставляют более продвинутые средства для управления установочными пакетами.
Также возможен вариант установки VB-приложений простым копированием, который сводится к выполнению нескольких шагов:
regsvr32.exe
и передать полный путь к файлу или программным способом, непосредственно вызвав метод DllRegisterServer
, который реализует COM-совместимая компонента.Начиная с версии VB 5.0 разработчику предоставляется возможность не только использовать готовые компоненты ActiveX, но и создавать свои. VB берёт на себя всю работу по созданию вспомогательного кода, который предназначен для регистрации информации о компоненте в системном реестре, реализации интерфейса IDispatch, создания уникальных GUID, используемых в качестве идентификаторов для классов (CLSID), интерфейсов (IID) и библиотек типов (LIBID). Благодаря такому подходу от программиста потребуется только создать классы с необходимым функционалом.
Создание новых GUID класса и интерфейса зависит от установленного параметра совместимости на вкладке свойств проекта. Он может принимать одно из трех состояний:
После завершения компиляции на выходе будет двоичный файл библиотеки по спецификации COM. Данный компонент реализует как минимум 2 интерфейса: IUnknown и IDispatch. Библиотека типов (TLB) будет интегрированна внутри ресурсов исполняемого файла. Также дополнительно создаются файлы с полезной информацией, такие как EXP и LIB.
Visual Basic предоставляет языковые средства для декларации и вызова функции из библиотек динамической компоновки (DLL). Данный механизм позволяет расширять приложения, за счёт использования дополнительных библиотек предоставляемых другими разработчиками, в том числе написанные на различных языках программирования. Один из таких наборов библиотек предоставляется операционной системой Microsoft Windows.
Общий синтаксис декларации функции и процедуры выглядит следующим образом:
[Public|Private] Declare Sub <имя_процедуры> lib "имя_динамической_библиотеки" [Alias "псевдоним"] [(параметры)]
[Public|Private] Declare Function <имя_функции> lib "имя_динамической_библиотеки" [Alias "псевдоним"] [(параметры)] [As тип_возврата]
Псевдонимы необходимо задавать в ряде случаев: использование в названии функции зарезервированных идентификаторов Visual Basic, название содержат недопустимые символы или не могут быть правильно интерпретированы средой. Вызываемые функции должны поддерживать соглашение о вызове StdCall.
При передаче параметра с типом String в функцию WINAPI, VB осуществляет автоматическую конвертацию кодировки из Unicode в ANSI, после выполнения функции, происходит обратная конвертация из ANSI в Unicode. Чтобы исключить автоматическую конвертацию строк, аргументы функции необходимо задекларировать с типом Long, и передавать указатель на строку, используя функцию StrPtr
, таким образом можно оптимизировать производительность приложения выполняющее множественные вызовы функций.
Пример вызова Windows API для получение полного пути к каталогу Windows и вывода сообщения на экран:
Private Declare Function GetWindowsDirectory Lib "kernel32.dll" Alias "GetWindowsDirectoryA" (ByVal buffer As String, ByVal nSize As Long) As Long
Private Declare Function MessageBox Lib "user32.dll" Alias "MessageBoxA" (ByVal hWnd As Long, ByVal lpText As String, ByVal lpCaption As String, ByVal wType As Long) As Long
Private Const MB_ICONASTERISK As Long = 64
Public Sub Main()
Dim buffer As String 'Переменная в которую будет получен результат функции.
Dim retLen As Long
buffer = String(256, vbNullChar)
lens = GetWindowsDirectory(buffer, Len(buffer)) 'Вызов функции
buffer = Left(buffer, lens)
MessageBox 0&, "ОС установлена в каталог: " & buffer, "Информация", MB_ICONASTERISK 'Вызов функции
End Sub
Следует учесть, что вызов функций WINAPI связан с определенными внутренними соглашениями, а именно, каким образом функция будет возвращать результат, какие структуры необходимо ей передать, количество аргументов и их типы, что будет содержаться в возвращаемом значении. Разработчики используют техническую документацию, предоставляемую вместе с библиотеками, с которыми они работают, чтобы правильно задекларировать функции и структуры.
Язык сильно привязан к своей среде разработки и к операционной системе Microsoft Windows, являясь исключительно инструментом написания Windows-приложений. Привязка к среде заключается в том, что существует большое количество средств, предназначенных для помощи и удобства программирования: встроенный отладчик, просмотр переменных и структур данных на лету, окно отладки, всплывающие подсказки при наборе текста программы (IntelliSense). Все эти преимущества делают бесполезным и даже невозможным использование Visual Basic вне среды разработки, например в обычном текстовом редакторе
VarPtr
, StrPtr
и ObjPtr
); пользоваться этими трюками иногда сложнее, чем, например, на C++.Однако стоит отметить, что все недостатки языка вытекают из его основного достоинства — простоты разработки графического интерфейса. Поэтому многие программисты используют Visual Basic для разработки интерфейса пользователя, а функциональность программы реализуют в виде динамически подключаемых библиотек (DLL), написанных на других языках (например, C++).
Это среда разработки практически не отличается от классического Visual Basic, которая предназначена для написания макросов и других прикладных программ для конкретных бизнес-приложений. Наибольшую популярность получил благодаря своему использованию в пакете Microsoft Office. Широкое распространение Visual Basic for Applications в сочетании с изначально недостаточным вниманием к вопросам безопасности привело к широкому распространению макровирусов.
Особенности:
Clipboard
, App
, Form
, Timer
, Data
. Вместо них предоставляются другие классы, реализованные в объектной модели конкретного приложения.Скриптовый язык, являющийся несколько усечённой версией обычного Visual Basic. Используется в основном для автоматизации администрирования систем Microsoft Windows, а также для создания страниц ASP и сценариев для Internet Explorer.
Особенности:
Variant
.vbs
или .vbe
Данный инструмент используется для разработки программного обеспечения под операционные системы Windows CE и Windows Mobile. Включает в себя интегрированную среду разработки, отладчик и эмулятор для тестирования приложений. eMbedded Visual Basic базируется не на полнофункциональном языке программирования Visual Basic, а на языке описания сценариев Visual Basic Scripting Edition. Приложения компилируются в P-код, а исполняемые файлы имеют расширение VB
, которые ассоциированы с хост-приложением.
Особенности:
Seamless Wikipedia browsing. On steroids.
Every time you click a link to Wikipedia, Wiktionary or Wikiquote in your browser's search results, it will show the modern Wikiwand interface.
Wikiwand extension is a five stars, simple, with minimum permission required to keep your browsing private, safe and transparent.