5.16. Справочник по Visual Basic
Справочник по Visual Basic
Visual Basic — это объектно-ориентированный язык программирования, разработанный Microsoft как часть платформы .NET. Он поддерживает декларативный синтаксис, упрощённую работу с графическим интерфейсом и интеграцию с Windows API, COM-объектами и другими компонентами экосистемы .NET.
Этот справочник охватывает:
- базовые типы данных;
- операторы;
- управляющие конструкции;
- процедуры и функции;
- классы и объекты;
- свойства и события;
- модули и пространства имён;
- стандартные функции;
- атрибуты и директивы компилятора;
- особенности работы с WinForms и WPF (в контексте VB);
- часто используемые значения перечислений и констант.
1. Типы данных
Целочисленные типы
| Тип | Диапазон | Размер (байт) |
|---|---|---|
SByte | от -128 до 127 | 1 |
Byte | от 0 до 255 | 1 |
Short | от -32 768 до 32 767 | 2 |
UShort | от 0 до 65 535 | 2 |
Integer | от -2 147 483 648 до 2 147 483 647 | 4 |
UInteger | от 0 до 4 294 967 295 | 4 |
Long | от -9 223 372 036 854 775 808 до 9 223 372 036 854 775 807 | 8 |
ULong | от 0 до 18 446 744 073 709 551 615 | 8 |
Числа с плавающей точкой
| Тип | Диапазон | Точность | Размер |
|---|---|---|---|
Single | ±1.5 × 10⁻⁴⁵ до ±3.4 × 10³⁸ | ~7 цифр | 4 байта |
Double | ±5.0 × 10⁻³²⁴ до ±1.7 × 10³⁰⁸ | ~15–16 цифр | 8 байт |
Decimal | ±1.0 × 10⁻²⁸ до ±7.9 × 10²⁸ | 28–29 цифр | 16 байт |
Логический тип
Boolean: принимает значенияTrueилиFalse.
Символьные и строковые типы
Char: один символ Unicode (2 байта).String: неизменяемая последовательность символов переменной длины.StringBuilder: изменяемая строка (из пространства имёнSystem.Text).
Другие типы
Date: представляет дату и время от 1 января 0001 до 31 декабря 9999.Object: универсальный тип, может содержать любой ссылочный или значимый тип.DBNull: представляет отсутствие значения в базе данных.IntPtr/UIntPtr: указатели для взаимодействия с нативным кодом.
2. Операторы
Арифметические операторы
+— сложение-— вычитание*— умножение/— деление с результатом типаDouble\— целочисленное делениеMod— остаток от деления^— возведение в степень
Операторы сравнения
=— равенство<>— неравенство<,>,<=,>=— сравнения
Логические операторы
And— логическое ИOr— логическое ИЛИXor— исключающее ИЛИNot— логическое НЕAndAlso— короткозамкнутое ИOrElse— короткозамкнутое ИЛИ
Операторы присваивания
=— присваивание значения+=,-=,*=,/=,\=,^=— составные присваивания
Операторы объединения и конкатенации
&— конкатенация строк (рекомендуется)+— также может использоваться для конкатенации, но менее надёжен
Операторы проверки типов
Is— проверка ссылочного равенстваIsNot— отрицаниеIsTypeOf … Is— проверка принадлежности к типуTryCast— безопасное приведение типаDirectCast— прямое приведение без проверкиCType— преобразование с вызовом методов преобразования
3. Управляющие конструкции
Условные операторы
If условие Then
' действия
ElseIf другое_условие Then
' другие действия
Else
' действия по умолчанию
End If
Select Case выражение
Case значение1
' действия
Case значение2 To значение3
' диапазон
Case Is > 100
' условие
Case Else
' по умолчанию
End Select
Циклы
For…Next
For i As Integer = 0 To 10 Step 2
' тело цикла
Next
For Each…Next
For Each item In коллекция
' обработка элемента
Next
Do…Loop
Do While условие
' тело
Loop
Do Until условие
' тело
Loop
Do
' тело
Loop While условие
Do
' тело
Loop Until условие
While…End While (устаревший, но поддерживается)
While условие
' тело
End While
Операторы перехода
Exit For— выход из циклаForExit Do— выход из циклаDoExit While— выход из циклаWhileExit Sub— выход из процедурыExit Function— выход из функцииContinue For— переход к следующей итерацииForContinue Do— переход к следующей итерацииDo
4. Процедуры и функции
Sub-процедуры
Sub ИмяПроцедуры(параметры)
' тело
End Sub
Параметры могут быть:
ByVal— передача по значению (по умолчанию)ByRef— передача по ссылке
Пример:
Sub Приветствие(ByVal имя As String)
Console.WriteLine("Привет, " & имя)
End Sub
Function-функции
Function ИмяФункции(параметры) As ТипВозврата
' вычисления
Return значение
End Function
Пример:
Function Сумма(a As Integer, b As Integer) As Integer
Return a + b
End Function
Необязательные параметры
Sub Пример(Optional ByVal x As Integer = 10)
' если x не указан, используется 10
End Sub
Параметры с переменным числом аргументов
Sub СписокИмён(ParamArray имена() As String)
For Each имя In имена
Console.WriteLine(имя)
Next
End Sub
5. Классы и объекты
Объявление класса
Public Class Автомобиль
Public Марка As String
Public ГодВыпуска As Integer
Public Sub Завести()
Console.WriteLine("Двигатель запущен")
End Sub
End Class
Конструкторы
Public Sub New(марка As String)
Me.Марка = марка
End Sub
Свойства
Private _скорость As Integer
Public Property Скорость() As Integer
Get
Return _скорость
End Get
Set(value As Integer)
If value >= 0 Then
_скорость = value
End If
End Set
End Property
Автоматические свойства:
Public Property Цвет As String
Методы
Методы — это процедуры или функции внутри класса. Они могут быть:
Public,Private,Protected,Friend,Protected Friend
События
Public Event ДвижениеНачато()
Public Sub Двигаться()
RaiseEvent ДвижениеНачато()
End Sub
Подписка на событие:
AddHandler авто.ДвижениеНачато, AddressOf Обработчик
6. Модули и пространства имён
Модуль
Module ГлобальныеФункции
Public Sub ПечатьПривет()
Console.WriteLine("Привет из модуля!")
End Sub
End Module
Модуль — это статический класс, все члены которого автоматически статичны.
Пространство имён
Namespace МояБиблиотека.Транспорт
Public Class Поезд
' ...
End Class
End Namespace
Использование:
Imports МояБиблиотека.Транспорт
7. Стандартные функции и классы
Работа со строками (Strings)
Len(str)— длина строкиMid(str, start, [length])— извлечение подстрокиLeft(str, n),Right(str, n)— левая/правая частьInStr(str, substr)— поиск подстрокиReplace(str, old, new)— заменаTrim(str),LTrim,RTrim— удаление пробеловUCase(str),LCase(str)— регистрStrConv(str, vbProperCase)— заглавные буквы в словах
Преобразования типов
CInt(x)— в целоеCDbl(x)— в DoubleCStr(x)— в строкуCBool(x)— в BooleanCDate(x)— в Date
Работа с датами
Now— текущая дата и времяToday— текущая датаDateAdd(interval, number, date)— добавление интервалаDateDiff(interval, date1, date2)— разница между датамиYear(d),Month(d),Day(d)— компоненты датыWeekday(d)— день недели (1 = воскресенье по умолчанию)
Интервалы: "yyyy", "q", "m", "y", "d", "w", "ww", "h", "n", "s"
Математические функции (Math)
Math.Abs(x)Math.Sqrt(x)Math.Pow(x, y)Math.Round(x, decimals)Math.Floor(x),Math.Ceiling(x)Math.Sin(x),Math.Cos(x),Math.Tan(x)— в радианахMath.PI
Работа с файлами (My.Computer.FileSystem)
FileExists(path)ReadAllText(path)WriteAllText(path, content)CopyFile(src, dest)DeleteFile(path)DirectoryExists(path)CreateDirectory(path)
8. WinForms: основные элементы управления
Общие свойства всех контролов
Name— имя компонентаText— отображаемый текстLocation— координаты (Point)Size— размер (Size)Visible— видимостьEnabled— доступностьTabIndex— порядок перехода по TabFont— шрифтForeColor,BackColor— цвета
Button
Click— событие нажатияDialogResult— результат диалога (если кнопка в форме)
TextBox
Text— содержимоеMultiline— многострочный режимMaxLength— максимальная длинаPasswordChar— символ маскировкиReadOnly— только для чтенияScrollBars— полосы прокрутки
Label
AutoSize— автоматический размерTextAlign— выравнивание текста
CheckBox
Checked— состояниеCheckState—Checked,Unchecked,Indeterminate
RadioButton
Checked— выбран ли- Группировка через
GroupBoxили общий контейнер
ComboBox
Items— коллекция элементовDropDownStyle—DropDown,DropDownList,SimpleSelectedIndex,SelectedItem,SelectedValue
ListBox
Items.Add(item)SelectedIndexSelectionMode—One,MultiSimple,MultiExtended
PictureBox
Image— изображениеSizeMode—Normal,StretchImage,AutoSize,CenterImage,Zoom
Timer
Interval— в миллисекундахEnabled— запуск/остановкаTick— событие
Form
StartPosition—Manual,CenterScreen,WindowsDefaultLocationWindowState—Normal,Minimized,MaximizedFormBorderStyle— стиль рамкиAcceptButton,CancelButton— кнопки по умолчаниюShow(),ShowDialog(),Close()
9. Перечисления (Enums) — часто используемые значения
DialogResult
OK,Cancel,Abort,Retry,Ignore,Yes,No
MessageBoxIcon
None,Error,Question,Exclamation,Information
MessageBoxButtons
OK,OKCancel,AbortRetryIgnore,YesNoCancel,YesNo,RetryCancel
FileDialog
OpenFileDialog,SaveFileDialog- Свойства:
FileName,Filter,InitialDirectory,Title Filterпример:"Текстовые файлы (*.txt)|*.txt|Все файлы (*.*)|*.*"
10. Директивы компилятора
#Const DEBUG = True#If DEBUG Then … #End If#Region "Имя"— сворачиваемый блок кода#ExternalSource— для отладки сгенерированного кода
11. Атрибуты
<Serializable()>— разрешает сериализацию<Obsolete("Сообщение")>— помечает как устаревшее<DllImport("user32.dll")>— для вызова нативных функций<STAThread()>— для главного потока Windows Forms
12. Обработка исключений
Try
' опасный код
Catch ex As IOException
' обработка ошибки ввода-вывода
Catch ex As Exception
' общая ошибка
Finally
' всегда выполняется
End Try
13. Особенности Visual Basic (.NET)
My-объекты
Visual Basic предоставляет глобальный объект My, упрощающий доступ к часто используемым функциям:
My.Application— информация о приложенииMy.Computer— работа с файловой системой, сетью, портамиMy.Forms— доступ ко всем формам проекта по имениMy.Settings— хранение и загрузка пользовательских настроекMy.Resources— доступ к внедрённым ресурсам (строки, изображения)My.User— информация о текущем пользователе Windows
Пример:
My.Computer.FileSystem.WriteAllText("log.txt", "Запись", True)
Dim имяПользователя As String = My.User.Name
Late Binding (позднее связывание)
VB.NET поддерживает позднее связывание через тип Object без явного приведения:
Dim obj As Object = CreateObject("Scripting.FileSystemObject")
obj.CreateTextFile("test.txt")
Это требует включения опции Option Strict Off (по умолчанию в старых проектах).
Option-директивы
Option Explicit On/Off— обязательное объявление переменных (рекомендуетсяOn)Option Strict On/Off— строгая типизация (рекомендуетсяOnдля безопасности)Option Infer On/Off— вывод типа черезDim x = 5→x As Integer
Синтаксические удобства
-
With … End With— группировка обращений к одному объекту:With кнопка
.Text = "Нажми"
.Width = 100
.Enabled = True
End With -
Необязательные скобки:
Call Метод()или простоМетод() -
Автоматическое преобразование строк в числа (при
Option Strict Off) -
Поддержка XML-литералов (уникальная черта VB.NET):
Dim xml = <книга>
<название>Вселенная IT</название>
</книга>
Console.WriteLine(xml.<название>.Value)
14. LINQ в Visual Basic
LINQ (Language Integrated Query) позволяет выполнять запросы к массивам, спискам, базам данных прямо в коде.
Синтаксис запроса
Dim числа = {1, 2, 3, 4, 5, 6, 7, 8, 9, 10}
Dim чётные = From n In числа
Where n Mod 2 = 0
Select n
For Each n In чётные
Console.WriteLine(n)
Next
Методы расширения
Dim результат = числа.Where(Function(x) x > 5).OrderBy(Function(x) x).ToArray()
Работа с объектами
Class Студент
Public Имя As String
Public Возраст As Integer
End Class
Dim студенты = {
New Студент With {.Имя = "Анна", .Возраст = 20},
New Студент With {.Имя = "Борис", .Возраст = 22}
}
Dim взрослые = From с In студенты
Where с.Возраст >= 21
Select с.Имя
15. Асинхронное программирование
VB.NET поддерживает Async/Await начиная с .NET Framework 4.5.
Async Function ЗагрузитьДанные() As Task(Of String)
Dim client As New HttpClient()
Dim содержимое As String = Await client.GetStringAsync("https://example.com")
Return содержимое
End Function
' Вызов
Dim данные As String = Await ЗагрузитьДанные()
Правила:
- Метод с
Awaitдолжен быть помечен какAsync - Возвращаемый тип —
Task,Task(Of T), илиSub(для обработчиков событий) - Нельзя использовать
Awaitв свойствах
16. Работа с коллекциями
Основные типы
List(Of T)— динамический массивDictionary(Of TKey, TValue)— словарь (ключ-значение)HashSet(Of T)— уникальные элементы без порядкаQueue(Of T)— очередь (FIFO)Stack(Of T)— стек (LIFO)
Примеры
Dim имена As New List(Of String)
имена.Add("Тимур")
имена.RemoveAt(0)
Dim возрасты As New Dictionary(Of String, Integer)
возрасты("Анна") = 25
If возрасты.ContainsKey("Анна") Then
Console.WriteLine(возрасты("Анна"))
End If
17. Настройки проекта (в контексте учебного материала)
В Visual Studio при создании проекта VB доступны следующие ключевые параметры:
Application (Приложение)
- Startup object — точка входа (
Sub Mainили форма) - Application type — Windows Forms App, Console App, Class Library
- Enable application framework — включает
My.Application, обработку исключений и т.д. - Shutdown mode — закрытие приложения при закрытии последней формы или главной формы
Compile (Компиляция)
- Option Explicit, Strict, Infer
- Target CPU — AnyCPU, x86, x64
- Optimize code — включить оптимизацию
- Treat all warnings as errors
Debug (Отладка)
- Start Action — запуск внешней программы, URL или конкретного исполняемого файла
- Command line arguments — аргументы командной строки
- Environment variables
References (Ссылки)
- Добавление сборок .NET (
System.IO,System.Net.Httpи др.) - NuGet-пакеты
- COM-объекты (через Interop)
Resources и Settings
- Resources — строки, изображения, файлы (доступ через
My.Resources) - Settings — пользовательские и прикладные настройки (доступ через
My.Settings)
18. Работа с XML и JSON
XML (через XElement и XML-литералы)
Dim документ = <?xml version="1.0"?>
<каталог>
<товар id="1">
<название>Мышь</название>
<цена>990</цена>
</товар>
</каталог>
For Each товар In документ...<товар>
Console.WriteLine(товар.<название>.Value)
Next
JSON (через Newtonsoft.Json или System.Text.Json)
Установка через NuGet: Newtonsoft.Json
Imports Newtonsoft.Json
Dim json = "{""имя"":""Тимур"",""возраст"":31}"
Dim данные = JsonConvert.DeserializeObject(Of Dictionary(Of String, Object))(json)
Console.WriteLine(данные("имя"))
19. Многопоточность
Thread
Dim поток As New Threading.Thread(Sub()
Console.WriteLine("Работа в фоне")
End Sub)
поток.Start()
ThreadPool
Threading.ThreadPool.QueueUserWorkItem(Sub(state)
Console.WriteLine("Из пула")
End Sub)
Task (рекомендуется)
Dim задача = Task.Run(Sub()
' тяжёлая операция
End Sub)
Await задача
20. Сериализация
BinaryFormatter (устаревший, небезопасен)
Не рекомендуется. Используйте альтернативы.
XmlSerializer
Dim сериализатор As New XmlSerializer(GetType(СписокТоваров))
Using поток As New FileStream("товары.xml", FileMode.Create)
сериализатор.Serialize(поток, мойСписок)
End Using
JsonSerializer (System.Text.Json)
Dim json As String = JsonSerializer.Serialize(мойОбъект)
Dim восстановленный = JsonSerializer.Deserialize(OfType(МойКласс))(json)
21. Обработка событий и делегаты
Делегат
Public Delegate Sub СообщениеДелегат(сообщение As String)
Событие с пользовательским аргументом
Public Class ДанныеИзмененыEventArgs
Inherits EventArgs
Public Property Изменено As String
End Class
Public Event ДанныеИзменены As EventHandler(Of ДанныеИзмененыEventArgs)
RaiseEvent ДанныеИзменены(Me, New ДанныеИзмененыEventArgs With {.Изменено = "Поле X"})
22. Распространённые ошибки и советы
- Всегда включайте
Option Strict Onв новых проектах. - Используйте
Usingдля автоматического освобождения ресурсов:Using файл As New StreamReader("data.txt")
Dim содержимое = файл.ReadToEnd()
End Using - Избегайте позднего связывания в производственном коде.
- Для WinForms не изменяйте UI из фонового потока — используйте
Invoke:If Me.InvokeRequired Then
Me.Invoke(Sub() Метка.Text = "Обновлено")
Else
Метка.Text = "Обновлено"
End If
23. Интеграция с другими технологиями
COM-объекты (например, Excel)
Dim excel = CreateObject("Excel.Application")
excel.Visible = True
Dim книга = excel.Workbooks.Add()
Требует ссылки на Microsoft.Office.Interop.Excel.
Работа с базами данных (через ADO.NET)
Using соединение As New SqlConnection("строка_подключения")
соединение.Open()
Dim команда As New SqlCommand("SELECT Имя FROM Пользователи", соединение)
Dim читатель = команда.ExecuteReader()
While читатель.Read()
Console.WriteLine(читатель("Имя"))
End While
End Using
24. Отладка и диагностика
- Точки останова (Breakpoints)
- Окно Immediate (
?переменная) - Логирование через
Debug.WriteLineилиTrace.WriteLine - Профилирование производительности в Visual Studio