Консоль, CLI, коллекции и файлы
VB.NET, после первой программы. Синтаксис коллекций в справочнике: 711 §16.
Консольное приложение
Консоль удобна для учебных задач, утилит и фоновых скриптов без WinForms. Минимальная точка входа:
Imports System
Module Program
Sub Main(args As String())
Console.OutputEncoding = System.Text.Encoding.UTF8
Console.WriteLine("Аргументы: " & String.Join(", ", args))
Console.Write("Введите имя: ")
Dim name = Console.ReadLine()
Console.WriteLine($"Здравствуйте, {name}")
End Sub
End Module
| Задача | API |
|---|---|
| Аргументы командной строки | Sub Main(args As String()) |
| Ввод строки | Console.ReadLine() |
| Код выхода | Environment.ExitCode = 1 или Return из Main в .NET 5+ top-level нет в VB — остаётся Sub Main |
| Пути к файлам рядом с EXE | AppContext.BaseDirectory |
В .NET 5+ шаблон консоли в Visual Studio может включать application framework — для простых примеров отключите «Enable application framework» в свойствах проекта, если мешает явный Sub Main.
Сборка без IDE —.NET CLI
Установленный .NET SDK позволяет создавать и запускать проекты из терминала — полезно для CI и быстрых экспериментов.
dotnet new console -lang "VB" -n DemoCli -o DemoCli
cd DemoCli
dotnet build
dotnet run -- Anton
Структура каталога:
DemoCli.vbproj— целевая платформа (net8.0и т.д.), ссылки,Option StrictProgram.vb(или несколько.vbв одном проекте)
Публикация одного EXE (self-contained, пример):
dotnet publish -c Release -r win-x64 --self-contained true
Библиотеку классов создают так: dotnet new classlib -lang "VB". На неё ссылается консоль через <ProjectReference>.
Какую коллекцию выбрать
| Тип | Когда уместен |
|---|---|
List(Of T) | Упорядоченный список, доступ по индексу, частые добавления в конец |
Dictionary(Of TKey, TValue) | Быстрый поиск по ключу (ID, имя файла, код валюты) |
HashSet(Of T) | Уникальные элементы, проверка «уже есть?» |
Queue(Of T) / Stack(Of T) | Очередь задач, обход в ширину/глубину |
LinkedList(Of T) | Частые вставки/удаления в середине без сдвига массива |
Массив T() | Фиксированный размер, совместимость с API, который ждёт массив |
Операции List(Of T):
| Действие | Синтаксис |
|---|---|
| Добавить в конец | Add(value) |
| Вставить | Insert(index, value) |
| Прочитать / заменить | list(index), list(index) = value |
| Удалить по индексу | RemoveAt(index) |
Dictionary(Of TKey, TValue): Add, Item(key), Remove, TryGetValue.
Queue(Of T) (FIFO): Enqueue, Dequeue, Peek.
Stack(Of T) (LIFO): Push, Pop, Peek.
Imports System.Collections.Generic
Dim scores As New List(Of Integer) From {10, 20, 15}
scores.Sort()
Dim best = scores(scores.Count - 1)
Dim byId As New Dictionary(Of Integer, String)
byId(1) = "Anna"
Dim name As String = Nothing
If byId.TryGetValue(2, name) Then
Console.WriteLine(name)
Else
byId(2) = "Boris"
End If
Обход и LINQ
For Each работает с любым IEnumerable(Of T):
For Each pair In byId
Console.WriteLine($"{pair.Key}: {pair.Value}")
Next
Краткий запрос без отдельной функции:
Dim longNames = From name In byId.Values Where name.Length > 4 Select name
Собственный класс с IEnumerable(Of T), индексаторами и перегрузкой операторов — в главе 11.
Работа с файлами и каталогами
Предпочтительны классы System.IO (одинаковы для VB.NET и C#), а не устаревшие функции VB6 (FileOpen, Line Input).
Пути
Imports System.IO
Dim baseDir = AppContext.BaseDirectory
Dim dataPath = Path.Combine(baseDir, "data", "input.txt")
Directory.CreateDirectory(Path.GetDirectoryName(dataPath))
Path.Combine корректно склеивает сегменты под Windows и Linux.
Текст целиком
Подходит для небольших конфигов и логов:
File.WriteAllText(dataPath, "line1" & Environment.NewLine & "line2", Text.UTF8Encoding.UTF8)
Dim text = File.ReadAllText(dataPath, Text.UTF8Encoding.UTF8)
Потоковое чтение (большие файлы)
Using reader As New StreamReader(dataPath, Text.UTF8Encoding.UTF8)
While Not reader.EndOfStream
Dim line = reader.ReadLine()
If line IsNot Nothing AndAlso line.Length > 0 Then
Console.WriteLine(line)
End If
End While
End Using
Using гарантирует закрытие файла даже при исключении (реализация IDisposable).
Запись построчно
Using writer As New StreamWriter(dataPath, append:=False, encoding:=Text.UTF8Encoding.UTF8)
writer.WriteLine("первая строка")
writer.WriteLine("вторая строка")
End Using
Метаданные
Dim info As New FileInfo(dataPath)
If info.Exists Then
Console.WriteLine($"Размер: {info.Length} байт, изменён: {info.LastWriteTime}")
End If
Бинарные форматы (собственные заголовки, сжатие) читают через FileStream + BinaryReader / BinaryWriter; для JSON и XML в .NET обычно берут отдельные библиотеки (System.Text.Json, System.Xml.Linq) — см. справочник §18.
Типичные ошибки
| Симптом | Причина | Что сделать |
|---|---|---|
IOException при записи | Файл открыт в другой программе | Закрыть редактор, использовать Using |
| Кракозябры в консоли | Кодировка консоли ≠ UTF-8 | Console.OutputEncoding, сохранять файл в UTF-8 |
KeyNotFoundException | Обращение dict(key) без проверки | TryGetValue или ContainsKey |
| Путь не найден | Относительный путь от «не того» каталога | AppContext.BaseDirectory или абсолютный путь |
Связь с GUI и VBA
- WinForms и WPF используют те же
List(Of T)иFileв фоновых задачах; долгие операции —Async/Await(см. процедуры). - Макросы внутри Excel по-прежнему проще на VBA; управление файлами там —
Open,Write #, объектFileSystemObject.
См. также
Другие статьи этого же раздела в боковом меню (как на странице «О разделе»). История Visual Basic - эволюция от BASIC до современных реализаций в экосистеме Microsoft. VB.NET — лямбда-выражения, Func/Action, LINQ, перегрузка операторов, индексаторы и IEnumerable для For Each. Основы языка Visual Basic - синтаксис, базовые конструкции и роль VB в обучении программированию. Архитектура приложений на Visual Basic - структура проекта, компоненты и подходы к построению Windows-приложений. Типизация, набор правил определения типа данных значений языка. Управляющие конструкции и операторы Visual Basic - условные блоки, циклы и выражения в прикладном коде. Процедуры и события в Visual Basic - обработчики, жизненный цикл событий и организация прикладной логики. Гайд по установке и настройке с написанием первой программы и её запуском. Справочник-шпаргалка по visual-basic — типы, синтаксис, стандартная библиотека, типовые паттерны. Не заменяет пошаговое обучение. Учебный курс — раздел. Краткий ввод в Visual Basic for Applications — макросы, объектная модель Excel и отличия от VB.NET. Как в VB.NET устроены value- и reference-типы, приведение CType/TryCast и работа с Nothing. Краткие итоги раздела «Visual Basic».История языка visual-basic
Лямбды и LINQ
Основы языка visual-basic
Архитектура приложений на visual-basic
Типы данных в visual-basic
Управляющие конструкции и операторы visual-basic
Процедуры и события в visual-basic
Первая программа на visual-basic
Справочник по visual-basic
VBA в Excel
Типы и преобразования
Итоги