Visual Basic ( VB ), первоначально называвшийся Visual Basic .NET ( VB.NET ), является многопарадигменным объектно-ориентированным языком программирования , реализованным на .NET , Mono и .NET Framework . Microsoft запустила VB.NET в 2002 году в качестве преемника своего оригинального языка Visual Basic, последней версией которого была Visual Basic 6.0. Хотя часть «.NET» названия была удалена в 2005 году, в этой статье используется «Visual Basic [.NET]» для обозначения всех языков Visual Basic, выпущенных с 2002 года, чтобы различать их и классический Visual Basic . Наряду с C# и F# , это один из трех основных языков, ориентированных на экосистему .NET. Microsoft обновила свою языковую стратегию VB 6 февраля 2023 года, заявив, что VB теперь является стабильным языком, и Microsoft продолжит его поддерживать. [6]
Интегрированная среда разработки (IDE) Microsoft для разработки на Visual Basic — Visual Studio . Большинство редакций Visual Studio являются коммерческими ; единственными исключениями являются Visual Studio Express и Visual Studio Community , которые являются бесплатными . Кроме того, .NET Framework SDK включает бесплатный компилятор командной строки под названием vbc.exe. Mono также включает компилятор командной строки VB.NET.
Visual Basic часто используется в сочетании с библиотекой Windows Forms GUI для создания настольных приложений для Windows . Программирование для Windows Forms с Visual Basic включает в себя перетаскивание элементов управления на форму с помощью конструктора GUI и написание соответствующего кода для каждого элемента управления.
Библиотека Windows Forms чаще всего используется для создания графических интерфейсов в Visual Basic. Все визуальные элементы в библиотеке классов Windows Forms являются производными от класса Control. Это обеспечивает минимальную функциональность элемента пользовательского интерфейса, такую как местоположение, размер, цвет, шрифт, текст, а также общие события, такие как щелчок и перетаскивание. Класс Control также имеет поддержку стыковки, позволяющую элементу управления изменять свое положение под своим родителем.
Формы обычно разрабатываются в среде Visual Studio IDE . В Visual Studio формы создаются с использованием методов перетаскивания . Инструмент используется для размещения элементов управления (например, текстовых полей, кнопок и т. д.) на форме (окне). Элементы управления имеют атрибуты и обработчики событий , связанные с ними. Значения по умолчанию предоставляются при создании элемента управления, но могут быть изменены программистом. Многие значения атрибутов могут быть изменены во время выполнения на основе действий пользователя или изменений в среде, что обеспечивает динамическое приложение. Например, код может быть вставлен в обработчик событий изменения размера формы, чтобы изменить положение элемента управления так, чтобы он оставался по центру формы, расширялся для заполнения формы и т. д. Вставляя код в обработчик событий для нажатия клавиши в текстовом поле, программа может автоматически переводить регистр вводимого текста или даже предотвращать вставку определенных символов.
Visual Basic использует операторы для указания действий. Наиболее распространенным оператором является оператор выражения, состоящий из выражения , которое должно быть оценено, в одной строке. В рамках этой оценки могут быть вызваны функции или подпрограммы , а переменным могут быть назначены новые значения. Для изменения обычного последовательного выполнения операторов Visual Basic предоставляет несколько операторов потока управления, идентифицированных зарезервированными ключевыми словами. Структурное программирование поддерживается несколькими конструкциями, включая две конструкции условного выполнения ( ... ... ... и ... ... ) и четыре конструкции итеративного выполнения (цикла) ( ... , ... , , и ... ) . Оператор ... имеет отдельные разделы инициализации и тестирования, оба из которых должны присутствовать. (См. примеры ниже.) Оператор проходит по каждому значению в списке.If
Then
Else
End If
Select Case
Case
End Select
Do
Loop
For
To
For Each
While
End While
For
To
For Each
Кроме того, в Visual Basic:
REM
, помещенное в начале строки или после любого количества пробелов или символов табуляции в начале строки, или после другого кода в строке, указывает, что (остальная часть) строки является комментарием .Ниже приведена очень простая программа на Visual Basic, версия классического примера « Hello, World! », созданная в виде консольного приложения:
Модуль Модуль1 Sub Main () ' Классическая демонстрационная программа "Hello, World!" Console . WriteLine ( "Hello, World!" ) End Sub Конечный модуль
Он выводит " Hello, World! " в окне командной строки . Каждая строка служит определенной цели, как показано ниже:
Модуль Модуль1
Это определение модуля. Модули — это раздел кода, который может содержать любой тип объекта, например константы или переменные, функции или методы, или классы, но не может быть инстанцирован как объект, например классы, и не может наследоваться от других модулей. Модули служат контейнерами кода, на которые можно ссылаться из других частей программы. [8]
Обычно модуль и файл кода, содержащий его, имеют одинаковое имя. Однако это не обязательно, поскольку один файл кода может содержать более одного модуля или класса.
Подглавный ( )
Эта строка определяет подпрограмму, называемую «Main». «Main» — это точка входа, где программа начинает выполнение. [9]
Console . WriteLine ( "Привет, мир!" )
Эта строка выполняет фактическую задачу записи вывода. Console — это системный объект, представляющий интерфейс командной строки (также известный как «консоль») и предоставляющий программный доступ к стандартным потокам операционной системы . Программа вызывает метод Console WriteLine, который заставляет переданную ему строку отображаться на консоли.
Вместо Console.WriteLine можно использовать MsgBox, который выводит сообщение в диалоговом окне вместо окна командной строки. [10]
Этот фрагмент кода выводит треугольник Флойда на консоль:
Импортирует System.Console Модульная программа Sub Main () Dim строки как целое число ' Проверка входных данных. Do Until Integer . TryParse ( ReadLine ( "Введите значение для количества отображаемых строк: " & vbcrlf ), rows ) AndAlso rows >= 1 WriteLine ( "Допустимый диапазон: 1 и {0}" , Integer . MaxValue ) Loop ' Вывод треугольника Флойда Dim current As Integer = 1 Dim row As Integer Dim column As Integer For row = 1 To rows For column = 1 To row Write ( "{0,-2} " , current ) current += 1 Next WriteLine () Следующий Конец Подпункта ''' <summary> ''' Как Console.ReadLine, но принимает строку приглашения. ''' </summary> Функция ReadLine ( Необязательное приглашение As String = Nothing ) As String Если приглашение IsNot Nothing Then Write ( приглашение ) End If Возврат консоли . ReadLine () Конец функции Конечный модуль
Является ли Visual Basic .NET просто еще одной версией Visual Basic или совершенно другим языком — это тема для обсуждения. Есть новые дополнения для поддержки новых функций, таких как структурированная обработка исключений и сокращенные выражения. Кроме того, с переходом на VB.NET произошло два важных изменения типов данных: по сравнению с Visual Basic 6 длина Integer
типа данных была удвоена с 16 до 32 бит, а длина Long
типа данных была удвоена с 32 до 64 бит. Это справедливо для всех версий VB.NET. 16-битное целое число во всех версиях VB.NET теперь известно как Short
. Аналогично, редактор Windows Forms очень похож по стилю и функциям на редактор форм Visual Basic.
Значительно изменилась семантика — от семантики объектно-ориентированного языка программирования , работающего на детерминированном движке с подсчетом ссылок на основе COM, до полностью объектно-ориентированного языка, поддерживаемого .NET Framework , который состоит из комбинации Common Language Runtime ( виртуальной машины, использующей сборку мусора на основе поколений и движок компиляции JIT ) и гораздо более крупной библиотеки классов . Увеличенная широта последней также является проблемой, с которой разработчикам VB приходится сталкиваться при переходе на этот язык, хотя это в некоторой степени решается функцией My в Visual Studio 2005.
Изменения изменили многие базовые предположения о «правильном» поведении в отношении производительности и удобства обслуживания. Некоторые функции и библиотеки больше не существуют; другие доступны, но не так эффективны, как «родные» альтернативы .NET. Даже если они компилируются, большинству преобразованных приложений Visual Basic 6 потребуется некоторый уровень рефакторинга, чтобы в полной мере воспользоваться преимуществами нового языка. Доступна документация, охватывающая изменения в синтаксисе, отладке приложений, развертывании и терминологии. [11]
В следующих простых примерах сравниваются синтаксисы VB и VB.NET. Они предполагают, что разработчик создал форму, поместил на нее кнопку и связал подпрограммы, показанные в каждом примере, с обработчиком событий нажатия упомянутой кнопки. Каждый пример создает окно сообщения "Hello, World" после нажатия кнопки на форме.
Visual Basic 6:
Частная подкоманда Command1_Click () MsgBox "Hello, World" Конец подкоманды
VB.NET (можно использовать класс MsgBox или MessageBox):
Private Sub Button1_Click ( sender As object , e As EventArgs ) Обрабатывает Button1 . Click MsgBox ( "Hello, World" ) End Sub
Sub
and End Sub
при двойном щелчке соответствующей кнопки в режиме конструктора. Visual Basic .NET также генерирует необходимые операторы Class
and End Class
. Разработчику нужно только добавить оператор, чтобы отобразить окно сообщения "Hello, World".Call
).Command1
и Button1
не являются обязательными. Однако это имена по умолчанию для командной кнопки в Visual Basic 6 и VB.NET соответственно.Handles
ключевое слово используется для того, чтобы сделать подпрограмму Button1_Click
обработчиком события Click
объекта Button1
. В Visual Basic 6 подпрограммы обработчиков событий должны иметь определенное имя, состоящее из имени объекта ( Command1
), подчеркивания ( _
) и имени события ( Click
, следовательно Command1_Click
).MessageBox.Show
В пространстве имен есть функция Microsoft.VisualBasic
, которая может использоваться (вместо MsgBox
) аналогично соответствующей функции в Visual Basic 6. Существует спор [12] о том, какую функцию использовать в качестве наилучшей практики (не только ограничиваясь показом окон сообщений, но и относительно других функций пространства Microsoft.VisualBasic
имен). Некоторые программисты предпочитают делать вещи "способом .NET", поскольку классы Framework имеют больше функций и менее специфичны для языка. Другие утверждают, что использование специфичных для языка функций делает код более читабельным (например, использование int
(C#) или Integer
(VB.NET) вместо System.Int32
).ByVal sender as Object
ByVal e as EventArgs
Следующий пример демонстрирует разницу между Visual Basic 6 и VB.NET. Оба примера закрывают активное окно .
Visual Basic 6:
Подпрограмма cmdClose_Click () Выгрузить меня Конец подпрограммы
VB.NET:
Sub btnClose_Click ( sender As Object , e As EventArgs ) Обрабатывает btnClose . Click Close () End Sub
Префикс «cmd» заменяется префиксом «btn», что соответствует новому соглашению, упомянутому ранее. [ which? ]
Visual Basic 6 не предоставлял общих сокращений операторов. Следующие являются эквивалентными:
Visual Basic 6:
Sub Timer1_Timer () ' Уменьшает высоту формы на один пиксель за тик Me.Height = Me.Height - 1 End Sub
VB.NET:
Sub Timer1_Tick ( отправитель как объект , e как EventArgs ) обрабатывает Timer1.Tick Me.Height - = 1 End Sub
C# и Visual Basic — первые языки Microsoft, созданные для программирования на .NET Framework (позже были добавлены F# и другие; другие также добавили языки). Хотя C# и Visual Basic синтаксически различаются, на этом различия в основном заканчиваются. Microsoft разработала оба этих языка как часть одной и той же платформы разработки .NET Framework. Они оба разрабатываются, управляются и поддерживаются одной и той же командой разработчиков языков в Microsoft. [13] Они компилируются в один и тот же промежуточный язык (IL), который работает с одними и теми же библиотеками времени выполнения .NET Framework. [14] Хотя есть некоторые различия в конструкциях программирования, их различия в основном синтаксические, и, если предположить, что вы избегаете библиотек «совместимости» Visual Basic, предоставляемых Microsoft для помощи в преобразовании из Visual Basic 6, почти каждая функция в VB имеет эквивалентную функцию в C# и наоборот. Наконец, оба языка ссылаются на одни и те же базовые классы .NET Framework для расширения своей функциональности. В результате, за редкими исключениями, программа, написанная на любом языке, может быть запущена через простой преобразователь синтаксиса для преобразования на другой. Для этой задачи существует множество продуктов с открытым исходным кодом и коммерческих продуктов.
Требуется кнопка с именем Button1.
Форма публичного класса1 Private Sub Button1_Click ( sender As Object , e As EventArgs ) Handles Button1 . Click MsgBox ( "Hello world!" , MsgBoxStyle . Information , "Hello world!" ) ' Отображение сообщения "Hello world!". End Sub End Class
Модуль Модуль1 Sub Main () Console . WriteLine ( "Hello world!" ) ' Написать в консоли "Hello world!" и начать новую строку. Console . ReadKey () ' Пользователь должен нажать любую клавишу, прежде чем приложение завершит работу. End Sub End Module
Требуется текстовое поле с названием «TextBox1» и кнопка с названием Button1.
Public Class Form1 Private Sub Button1_Click ( sender As Object , e As EventArgs ) Handles Button1 . Click CreateObject ( "Sapi.Spvoice" ). Speak ( TextBox1 . Text ) End Sub End Class
Модуль Модуль1 Частный голос = CreateObject ( "Sapi.Spvoice" ) Частный текст как строка Подглавный ( ) Консоль . Write ( "Введите текст для произнесения: " ) ' Say "Введите текст для произнесения: " Text = Console.ReadLine () ' Пользователь должен ввести текст, чтобы произнести его . Voice.Speak ( Text ) ' Произнести текст , введенный пользователем. Конец субтитра Конечный модуль
Первая версия Visual Basic .NET дебютировала в 2002 году, придя на смену классической версии Visual Basic[обновлять] 6.0. По состоянию на 2020 год выпущено десять версий Visual Basic .NET.
Первая версия, Visual Basic .NET, основана на .NET Framework 1.0 . Наиболее важной особенностью является управляемый код , что отличает ее от классического Visual Basic.
Visual Basic .NET 2003 был выпущен с .NET Framework 1.1 . Новые функции включали поддержку .NET Compact Framework и улучшенный мастер обновления VB . Также были внесены улучшения в производительность и надежность .NET IDE (в частности, фонового компилятора) и среды выполнения. Кроме того, Visual Basic .NET 2003 был доступен в Visual Studio.NET Academic Edition, распространяемом среди определенного количества ученых [ слова-ласка ] из каждой страны бесплатно.
После Visual Basic .NET 2003 компания Microsoft исключила «.NET» из названия продукта, назвав следующую версию Visual Basic 2005.
В этом выпуске Microsoft добавила множество функций, призванных усилить направленность Visual Basic .NET как платформы быстрой разработки приложений и еще больше отличить ее от C# , в том числе:
My.Form2.Text = " MainForm "
System.WindowsApplication1.Forms.Form2.text = " MainForm "
Чтобы сократить разрыв между собой и другими языками .NET, в эту версию добавлено:
В Visual Basic 2005 появился IsNot
оператор, который делает 'If X IsNot Y'
эквивалентным 'If Not X Is Y'
. Он получил известность [20] , когда выяснилось, что он является предметом патентной заявки Microsoft. [21] [22]
Visual Basic 9.0 был выпущен вместе с .NET Framework 3.5 19 ноября 2007 года.
В этом выпуске Microsoft добавила множество функций, в том числе:
В апреле 2010 года Microsoft выпустила Visual Basic 2010. Microsoft планировала использовать Dynamic Language Runtime (DLR) для этого выпуска [23], но перешла на стратегию совместной эволюции между Visual Basic и родственным языком C#, чтобы приблизить оба языка к паритету друг с другом. Врожденная способность Visual Basic динамически взаимодействовать с объектами CLR и COM была улучшена для работы с динамическими языками, построенными на DLR, такими как IronPython и IronRuby . [24] Компилятор Visual Basic был улучшен для вывода продолжения строки в наборе общих контекстов, во многих случаях устраняя необходимость в символах продолжения строки "_". Кроме того, существующая поддержка встроенных функций была дополнена поддержкой встроенных подпрограмм, а также многострочными версиями лямбда-выражений Sub и Function. [25]
Visual Basic 2012 был выпущен вместе с .NET Framework 4.5 . Основные функции, представленные в этой версии, включают: [ необходимо дополнительное объяснение ]
Visual Basic 2013 был выпущен вместе с .NET Framework 4.5.1 в Visual Studio 2013. Также можно создавать приложения .NET Framework 4.5.2, установив Developer Pack. [26]
Visual Basic 2015 (кодовое название VB "14.0") был выпущен вместе с Visual Studio 2015. Возможности языка включают новый оператор "?" для выполнения встроенных проверок на null, а также новую функцию интерполяции строк для форматирования строк в строке. [27]
Visual Basic 2017 (кодовое название VB "15.0") был выпущен вместе с Visual Studio 2017. Расширяет поддержку новых языковых возможностей Visual Basic 15 с ревизиями 2017, 15.3, 15.5, 15.8. Вводит новые рефакторинги, которые позволяют организовать исходный код одним действием. [28] [29]
Visual Basic 2019 (кодовое название VB "16.0") был выпущен вместе с Visual Studio 2019. [30] Это первая версия Visual Basic, ориентированная на .NET Core. [31]
Официальный компилятор Visual Basic написан на Visual Basic и доступен на GitHub как часть платформы компилятора .NET . [32] Создание инструментов с открытым исходным кодом для разработки на Visual Basic происходило медленнее по сравнению с C# , хотя платформа разработки Mono обеспечивает реализацию библиотек, специфичных для Visual Basic, и совместимый с Visual Basic 2005 компилятор, написанный на Visual Basic, [33] а также стандартные библиотеки фреймворков, такие как библиотека Windows Forms GUI.
MonoDevelop был альтернативной IDE с открытым исходным кодом . Среда Gambas также похожа, но отличается от Visual Basic, как и редактор Visual FB для FreeBasic .
новым DLR у нас есть поддержка IronPython, IronRuby, Javascript и новой динамической компиляции VBx
Basic привязывается к объектам из динамических языков, таких как IronPython и IronRuby