LEARN X · ЗА 15 МИН
Visual Basic .NET
Весь Visual Basic .NET на одной странице: модули, типы, циклы, коллекции, классы, ООП, обработка ошибок и особенности языка в комментариях кода.
Visual Basic .NET (VB.NET) — язык платформы .NET со словесным, читаемым синтаксисом. Весь язык на одной странице через плотно закомментированный код. Комментарий начинается с одинарной кавычки '. Читайте сверху вниз.
Структура программы
Точка входа — процедура Sub Main внутри модуля.
' Это однострочный комментарий — начинается с апострофа.
REM Устаревший способ комментария — ключевое слово REM.
' Imports подключает пространство имён (аналог using/import).
Imports System
' Module — контейнер для кода. Точка входа — Sub Main.
Module Program
' Sub Main — стартовая процедура (ничего не возвращает).
Sub Main()
' Console.WriteLine — печать строки с переводом строки.
Console.WriteLine("Привет, мир!")
' Console.Write — без перевода строки.
Console.Write("Без ")
Console.WriteLine("переноса")
' Чтение строки с клавиатуры:
' Dim name As String = Console.ReadLine()
End Sub
End Module
' VB.NET НЕ чувствителен к регистру: dim = Dim = DIM.
' Инструкции разделяются переводом строки, а не точкой с запятой.
Переменные и типы
Объявление через Dim ... As Тип.
' Dim имя As Тип = значение
Dim age As Integer = 25 ' целое 32 бита
Dim big As Long = 9000000000L ' целое 64 бита
Dim price As Double = 19.99 ' дробное двойной точности
Dim rate As Decimal = 0.05D ' точное дробное (деньги)
Dim isOk As Boolean = True ' True / False
Dim letter As Char = "A"c ' один символ, суффикс c
Dim name As String = "Анна" ' строка
' Несколько переменных одного типа в одной строке:
Dim x, y, z As Integer
' Const — константа, значение неизменно.
Const Pi As Double = 3.14159
' Nothing — значение по умолчанию (null для ссылок, 0 для чисел).
Dim empty As String = Nothing
' Преобразования типов:
Dim n As Integer = CInt("42") ' строка → Integer
Dim s As String = CStr(42) ' число → строка
Dim d As Double = CDbl("3.14") ' строка → Double
' TryParse — безопасный разбор без исключения:
Dim parsed As Integer
Dim okParse As Boolean = Integer.TryParse("100", parsed)
Строки
Конкатенация через &, интерполяция через $"...".
Dim first As String = "Иван"
Dim last As String = "Петров"
' & — конкатенация (рекомендуется вместо +).
Dim full As String = first & " " & last ' "Иван Петров"
' Интерполяция строк: $"...{выражение}..."
Dim age As Integer = 30
Dim msg As String = $"{first}, возраст {age}"
' String.Format с плейсхолдерами {0}, {1}:
Dim t As String = String.Format("{0} лет: {1}", age, first)
' Многострочный текст и спецсимволы:
Dim line As String = "Строка1" & vbCrLf & "Строка2" ' перевод строки
Dim tab As String = "A" & vbTab & "B" ' табуляция
Dim quote As String = "Он сказал ""да""" ' кавычки удваиваются
' Методы строк:
Dim s As String = " Hello World "
Dim a = s.Trim() ' убрать пробелы по краям
Dim b = s.ToUpper() ' ВЕРХНИЙ регистр
Dim c = s.ToLower() ' нижний регистр
Dim d = s.Replace("o", "0") ' замена подстроки
Dim len As Integer = s.Length ' длина
Dim has As Boolean = s.Contains("World")
Dim idx As Integer = s.IndexOf("World") ' позиция или -1
Dim sub_ As String = s.Substring(2, 5) ' подстрока с позиции
Dim parts() As String = "a,b,c".Split(","c) ' массив частей
Операторы и условия
If / ElseIf / Else / End If и Select Case.
Dim n As Integer = 7
' Арифметика: + - * / \ Mod ^
Dim div As Double = 7 / 2 ' 3.5 — обычное деление
Dim idiv As Integer = 7 \ 2 ' 3 — целочисленное деление
Dim rem_ As Integer = 7 Mod 2 ' 1 — остаток
Dim pow As Double = 2 ^ 10 ' 1024 — возведение в степень
' Сравнения: = <> < > <= >=
' Логические: And Or Not AndAlso OrElse (с коротким замыканием)
If n > 0 AndAlso n < 10 Then
Console.WriteLine("Одна цифра")
ElseIf n >= 10 Then
Console.WriteLine("Десять и больше")
Else
Console.WriteLine("Ноль или отрицательное")
End If
' Однострочный If:
If n <> 0 Then Console.WriteLine("Не ноль")
' Тернарный аналог — функция If(условие, еслиИстина, еслиЛожь):
Dim sign As String = If(n >= 0, "плюс", "минус")
' Select Case — выбор по значению.
Select Case n
Case 1
Console.WriteLine("один")
Case 2, 3, 4 ' несколько значений
Console.WriteLine("немного")
Case 5 To 9 ' диапазон
Console.WriteLine("несколько")
Case Is > 9 ' условие через Is
Console.WriteLine("много")
Case Else
Console.WriteLine("другое")
End Select
Циклы
For/Next, For Each, While, Do/Loop.
' For — счётчик от/до, опционально Step (шаг).
For i As Integer = 1 To 5
Console.Write(i & " ") ' 1 2 3 4 5
Next
For i As Integer = 10 To 0 Step -2 ' 10 8 6 4 2 0
Console.Write(i & " ")
Next
' For Each — перебор элементов коллекции.
Dim nums() As Integer = {10, 20, 30}
For Each num As Integer In nums
Console.Write(num & " ")
Next
' While ... End While — пока условие истинно.
Dim k As Integer = 0
While k < 3
k += 1
End While
' Do While ... Loop — проверка до тела.
Dim j As Integer = 0
Do While j < 3
j += 1
Loop
' Do ... Loop Until — проверка после тела (выполнится хотя бы раз).
Dim m As Integer = 0
Do
m += 1
Loop Until m >= 3
' Управление циклом:
For i As Integer = 1 To 10
If i = 3 Then Continue For ' пропустить итерацию
If i = 6 Then Exit For ' выйти из цикла
Next
Массивы и коллекции
Array, List(Of T), Dictionary(Of K, V).
' Массив фиксированного размера. Индексация с 0.
Dim arr(4) As Integer ' 5 элементов: индексы 0..4
arr(0) = 100
Dim primes() As Integer = {2, 3, 5, 7, 11} ' с инициализацией
Console.WriteLine(primes(2)) ' 5
Console.WriteLine(primes.Length) ' 5
' Двумерный массив:
Dim grid(2, 2) As Integer
grid(0, 1) = 9
' List(Of T) — динамический список (нужен Imports System.Collections.Generic).
Dim names As New List(Of String) From {"Аня", "Боб"}
names.Add("Вика") ' добавить
names.Remove("Боб") ' удалить по значению
names.Insert(0, "Зоя") ' вставить по индексу
Console.WriteLine(names.Count) ' количество
Console.WriteLine(names(0)) ' доступ по индексу
Dim hasAnya As Boolean = names.Contains("Аня")
' Dictionary(Of K, V) — пары ключ→значение.
Dim ages As New Dictionary(Of String, Integer) From {
{"Аня", 25},
{"Боб", 30}
}
ages("Вика") = 28 ' добавить/изменить
Console.WriteLine(ages("Аня")) ' 25
If ages.ContainsKey("Боб") Then Console.WriteLine(ages("Боб"))
For Each pair In ages ' перебор пар
Console.WriteLine($"{pair.Key} = {pair.Value}")
Next
Процедуры и функции
Sub — без возврата, Function — возвращает значение. ByVal / ByRef / Optional.
' Sub — процедура без возвращаемого значения.
Sub Greet(name As String)
Console.WriteLine($"Привет, {name}!")
End Sub
' Function — возвращает значение через As Тип и Return.
Function Add(a As Integer, b As Integer) As Integer
Return a + b
End Function
' ByVal (по умолчанию) — копия; ByRef — изменяет оригинал.
Sub Increment(ByRef value As Integer)
value += 1 ' меняет переменную вызывающего
End Sub
' Optional — необязательный параметр со значением по умолчанию.
Function Power(base As Double, Optional exp As Integer = 2) As Double
Return base ^ exp
End Function
' ParamArray — произвольное число аргументов.
Function Sum(ParamArray items() As Integer) As Integer
Dim total As Integer = 0
For Each it In items
total += it
Next
Return total
End Function
' Вызовы:
Greet("Иван")
Dim s As Integer = Add(2, 3) ' 5
Dim n As Integer = 5
Increment(n) ' n стало 6
Dim p As Double = Power(3) ' 9 (exp по умолчанию 2)
Dim total As Integer = Sum(1, 2, 3, 4) ' 10
' Именованные аргументы:
Dim q As Double = Power(base:=2, exp:=10) ' 1024
Классы и ООП
Class, Property, конструктор New, наследование Inherits.
Class Animal
' Приватное поле.
Private _name As String
' Авто-свойство (Property) с геттером/сеттером.
Public Property Age As Integer
' Свойство с логикой.
Public Property Name As String
Get
Return _name
End Get
Set(value As String)
_name = value
End Set
End Property
' Конструктор — Sub New.
Public Sub New(name As String, age As Integer)
_name = name
Me.Age = age ' Me — ссылка на текущий объект (this)
End Sub
' Overridable — метод можно переопределить в наследнике.
Public Overridable Function Speak() As String
Return "..."
End Function
End Class
' Inherits — наследование.
Class Dog
Inherits Animal
' Вызов конструктора базового класса через MyBase.New.
Public Sub New(name As String, age As Integer)
MyBase.New(name, age)
End Sub
' Overrides — переопределение метода.
Public Overrides Function Speak() As String
Return "Гав!"
End Function
End Class
' Использование (New создаёт объект):
Dim d As New Dog("Рекс", 3)
Console.WriteLine(d.Name) ' Рекс
Console.WriteLine(d.Speak()) ' Гав!
' Shared — член класса, общий для всех (static).
Class Counter
Public Shared Total As Integer = 0
Public Sub New()
Total += 1
End Sub
End Class
' Интерфейс:
Interface IShape
Function Area() As Double
End Interface
Class Circle
Implements IShape
Public R As Double
Public Function Area() As Double Implements IShape.Area
Return Math.PI * R * R
End Function
End Class
Обработка ошибок
Try / Catch / Finally и Throw.
Try
Dim x As Integer = CInt("не число") ' выбросит исключение
Catch ex As FormatException
' Перехват конкретного типа исключения.
Console.WriteLine("Неверный формат: " & ex.Message)
Catch ex As Exception
' Перехват любого исключения (общий случай — последним).
Console.WriteLine("Ошибка: " & ex.Message)
Finally
' Finally выполняется всегда (и при ошибке, и без).
Console.WriteLine("Готово")
End Try
' Throw — выброс исключения вручную.
Function Divide(a As Integer, b As Integer) As Integer
If b = 0 Then
Throw New DivideByZeroException("Деление на ноль")
End If
Return a \ b
End Function
' Catch с условием (When):
Try
Throw New Exception("42")
Catch ex As Exception When ex.Message = "42"
Console.WriteLine("Поймали именно 42")
End Try
Работа со строками — продолжение
Построение и разбор текста.
' StringBuilder — эффективная сборка строк в цикле.
' (Imports System.Text)
Dim sb As New System.Text.StringBuilder()
For i As Integer = 1 To 3
sb.Append("item").Append(i).Append(" ")
Next
Dim result As String = sb.ToString() ' "item1 item2 item3 "
' Проверки и форматирование:
Dim s As String = ""
Dim isEmpty As Boolean = String.IsNullOrEmpty(s) ' True
Dim isBlank As Boolean = String.IsNullOrWhiteSpace(" ") ' True
' Дополнение и выравнивание:
Dim n As String = "7".PadLeft(3, "0"c) ' "007"
Dim r As String = "ab".PadRight(5) ' "ab "
' StartsWith / EndsWith:
Dim url As String = "https://codechick.io"
Dim secure As Boolean = url.StartsWith("https") ' True
' Join — собрать массив в строку через разделитель.
Dim joined As String = String.Join(", ", {"a", "b", "c"}) ' "a, b, c"
' Форматирование чисел:
Dim money As String = (1234.5).ToString("N2") ' "1 234,50"
Dim hex As String = (255).ToString("X") ' "FF"
LINQ — запросы к коллекциям
Фильтрация и преобразование данных (нужен Imports System.Linq).
Dim nums As New List(Of Integer) From {5, 1, 8, 3, 9, 2}
' Синтаксис запросов (похож на SQL):
Dim bigOnes = From n In nums
Where n > 3 ' фильтр
Order By n ' сортировка
Select n ' проекция
' bigOnes: 5, 8, 9
' Тот же запрос через методы-расширения:
Dim result = nums.Where(Function(n) n > 3) _
.OrderBy(Function(n) n) _
.ToList()
' Function(n) n > 3 — лямбда (анонимная функция).
' Агрегаты:
Dim total As Integer = nums.Sum() ' сумма
Dim maxN As Integer = nums.Max() ' максимум
Dim minN As Integer = nums.Min() ' минимум
Dim avg As Double = nums.Average() ' среднее
Dim cnt As Integer = nums.Count(Function(n) n > 4) ' сколько > 4
' Проверки:
Dim anyBig As Boolean = nums.Any(Function(n) n > 8) ' есть ли хоть один
Dim allPos As Boolean = nums.All(Function(n) n > 0) ' все ли положительны
' Преобразование (Select) и взятие части:
Dim squares = nums.Select(Function(n) n * n).ToArray() ' квадраты
Dim firstTwo = nums.Take(2).ToList() ' первые 2
Dim skip = nums.Skip(2).ToList() ' пропустить 2
Dim found = nums.FirstOrDefault(Function(n) n > 100) ' 0, если не найдено
Стандартная библиотека
Math, DateTime, Random — частые помощники из .NET.
' Math — математические функции.
Dim r As Double = Math.Sqrt(16) ' 4 — корень
Dim p As Double = Math.Pow(2, 8) ' 256 — степень
Dim ab As Integer = Math.Abs(-5) ' 5 — модуль
Dim mx As Integer = Math.Max(3, 7) ' 7
Dim rnd As Double = Math.Round(3.14159, 2) ' 3.14
Dim up As Double = Math.Ceiling(4.1) ' 5 — вверх
Dim dn As Double = Math.Floor(4.9) ' 4 — вниз
Console.WriteLine(Math.PI) ' 3.14159...
' DateTime — дата и время.
Dim now As DateTime = DateTime.Now ' текущие дата и время
Dim today As DateTime = DateTime.Today ' сегодня (00:00)
Dim bday As New DateTime(2000, 1, 15) ' конкретная дата
Console.WriteLine(now.Year) ' год
Console.WriteLine(now.ToString("dd.MM.yyyy")) ' формат
Dim tomorrow As DateTime = now.AddDays(1) ' +1 день
Dim diff As TimeSpan = now - bday ' разница
Console.WriteLine(diff.TotalDays) ' дней между датами
' Random — случайные числа.
Dim rng As New Random()
Dim dice As Integer = rng.Next(1, 7) ' 1..6 (верх не включён)
Dim frac As Double = rng.NextDouble() ' [0.0, 1.0)
' Преобразования и проверки:
Console.WriteLine(Convert.ToString(255, 2)) ' "11111111" — двоичное
Console.WriteLine(Char.IsDigit("5"c)) ' True
Особенности языка
Option Strict, Option Explicit, Nothing и нюансы.
' Директивы в самом верху файла (до Imports):
Option Explicit On ' требует объявлять все переменные через Dim
Option Strict On ' запрещает неявные сужающие преобразования
Option Infer On ' разрешает вывод типа: Dim x = 5 (x — Integer)
' С Option Strict On это ОШИБКА (потеря данных неявно):
' Dim i As Integer = 3.14 ' нужно CInt(3.14)
' Nothing — отсутствие значения.
Dim obj As String = Nothing
If obj Is Nothing Then Console.WriteLine("пусто") ' сравнение через Is
' Для НЕ-Nothing: If obj IsNot Nothing Then ...
' Оператор ?. — безопасный доступ (не упадёт на Nothing):
Dim len As Integer? = obj?.Length ' вернёт Nothing, а не ошибку
' Оператор ?? через If — значение по умолчанию:
Dim safe As String = If(obj, "по умолчанию")
' Nullable-типы (могут быть Nothing):
Dim maybe As Integer? = Nothing
maybe = 5
If maybe.HasValue Then Console.WriteLine(maybe.Value)
' With — обращение к объекту без повторения имени.
Dim list As New List(Of Integer)
With list
.Add(1)
.Add(2)
End With
' Числовые литералы и суффиксы:
' 100L — Long, 1.5F — Single, 1.5D — Decimal, &HFF — hex, &O17 — octal
' True/False — встроенные булевы. VB.NET внутри возвращает -1 для True
' в числовом контексте, но для логики используйте только True/False.