Visual Basic .NET

概説

C++やJava、C#などのC系言語と比較して、VB/VB.NETは文法が自然言語に近いため、プログラミング初心者にも比較的習得しやすく、また使いやすいといわれているが、本格的なソフトウェアの作成にも使用できる。なおVB.NETはマイクロソフトが推進している.NETの一環で開発された言語であり、アプリケーション実行コードは.NET Framework上で動作するほか、言語仕様にオブジェクト指向が本格的に取り入れられるなど、前バージョンのVisual Basic 6.0からの変更点はかなりの数にのぼり、言語仕様の互換性は低い。VB.NETに移行できない旧VB製アプリケーションを救済するため、VB.NETがリリースされた後にリリースされたMicrosoft Windows OSにおいても、旧VBの開発環境や旧VBランタイムのサポートが条件付きで継続されるなどの特別延命措置が図られたりしている。Visual Basic .NETには、従来のVisual Basicからの移行を容易にするアップグレードウィザードや、従来の一部機能を実現する互換ライブラリが実装されている 。
コンパイラはマイクロソフトから無料で提供されているので、Windows付属のメモ帳等を使ってプログラムすることもできるが、専用に開発された統合開発環境を使って開発するのが一般的である。
かつては旧来のVisual Basicと同様、製品は有償でのみ提供されていたが、バージョン2005以降は機能制限版であるExpressエディションが、またバージョン2013以降はProfessionalエディション相当の機能を持ちライセンス制約の強いCommunityエディションがそれぞれ無償で配布されている。
VB.NETではMicrosoft Windows用のアプリケーション開発、Web用のアプリケーション開発、およびモバイル向けのアプリケーション開発などを行なうことができる。利用可能なVisual Studioプロジェクトテンプレートも、Visual C#とほぼ同様である。

実行速度

旧来のVBはVisual C++と比較してアプリケーションの実行速度性能に問題が発生することもあったが、実行環境を.NET Frameworkに移したVB.NETでは、最終的にコンパイラが出力するコードはVisual C#等と同じMSIL中間コード (Javaのバイトコードに近い) であるため、他の.NET言語と比較して速度面でも遜色ないものとなっている。なお、MSILは実行時に.NETのJITコンパイラにより最適化されたネイティブコードに変換される。

DirectXのサポート

Direct3Dなどのマルチメディアコンポーネントを含むMicrosoft DirectXに関しては、VB.NETおよびVisual C#などの.NET言語からDirectX 9を操作するための.NETマネージ ライブラリであるManaged DirectXが提供されている。なお、XNAのリリースに伴い、Managed DirectXの更新は終了しているが、Windows API Code Pack for Microsoft .NET Frameworkと呼ばれるWindows APIおよびDirectXを含むCOMコンポーネントの.NET用ラッパーライブラリ、もしくはオープンソース開発されているSlimDXライブラリやSharpDXライブラリなどを使用することで、.NET言語からもDirectX 9、DirectX 10、DirectX 11やDirectX 12を使用することが可能となっている。C++/CLIなどのグルー言語により独自のラッパーを明示的に作成することで、.NET言語からDirectXを間接的に利用することも可能である。

コード例

以下はコンソールに"Hello, World!"と出力する例である。
Module Module1
    Sub Main()
        Console.WriteLine("Hello, World!")
    End SubEnd Module

Visual Basicとの文法の比較

これらはVisual BasicとVisual Basic .NETの文法の類似点を示したサンプルコードである。どちらもメッセージボックスに"Hello, World"のメッセージとOKボタンを表示させるものである。
従来のVisual Basicのコード例:
Private Sub Command1_Click()
    MsgBox "Hello, World"End Sub
Visual Basic .NETのコード例:
'Imports System.Windows.Forms ' Windows Forms の場合。'Imports System.Windows ' WPF の場合。Private Sub Button1_Click(ByVal sender As System.Object, _
              ByVal e As System.EventArgs) Handles Button1.Click
    MessageBox.Show("Hello, World")End Sub
なお、Visual Basic .NETでも旧VBやVBScript に実装されていた旧MsgBox関数などの互換機能はライブラリによってサポートされている  が、以下のように()を使ったメソッド呼び出しの形で記述しなければならない。
Imports Microsoft.VisualBasic.Compatibility ' ファイル先頭に記述する。Private Sub Button1_Click(ByVal sender As System.Object, _
              ByVal e As System.EventArgs) Handles Button1.Click
    MsgBox("Hello, World")End Sub

オブジェクト指向への対応

VB6ではクラスモジュールの定義、メンバー変数やメソッドのカプセル化、インターフェイスの実装によるポリモーフィズムをサポートしていた。ただしクラスの継承はサポートせず、オブジェクト指向プログラミングを完全サポートしているとは言い難かった。VB.NETではクラス継承がサポートされ、本格的なオブジェクト指向言語となった。

.NET Frameworkライブラリ

VB6ではVisual Basicに固有のステートメントによってフォームの制御や文字列の操作をプログラムしていたが、VB.NETではC#などと共通に使われる.NET Frameworkの標準ライブラリに従ったプログラミングが必要となった。このため、従来のVBプログラマのノウハウが通用しにくい状況が生まれた。このことがVBプログラマがVB6からVB.NETへの移行が進まない原因の一つではないかとの指摘がある。

エラー処理

VB6ではエラー発生時にOn Error GoTo文によってメソッド内のエラー処理にジャンプさせる方式であった。VB.NETではC#やJavaなどと同様に、Try - Catch - Finallyによる例外処理を記述できる。これによって呼び出し先メソッド内部で生じたエラーを、呼び出し側メソッドで一括して取り扱うことができるなど、プログラムの柔軟性が増した。

固定長文字列の廃止

他の.NET言語との互換性確保のため、固定長文字列は (基本データ型としては) サポートされなくなった。Visual Basic 6.0互換関数が用意されているが、マルチバイト文字では正常に動作しないため、目的の出力形式にエンコードしてバイト数をカウントしてから処理を行うといったコーディングが必要となる。

Visual Basic .NET (2002)

2002年に、Visual Basicを基に強いオブジェクト指向プログラミングの概念を取り入れた新しい言語Visual Basic .NETの開発環境・処理系として、Microsoft Visual Studio .NET (Microsoft Visual Basic .NET) がリリースされた。VB.NETはVB6の後継言語とされ、マイクロソフト社の.NET Frameworkという新しい技術基盤に対応している。対応する.NETのバージョンは.NET Framework 1.0。
VB.NETは新たにウェブサーバ用のプログラム、Web用のプログラムが開発できるなどのネットワーク開発機能が追加された。VB6の後継といっても、豊富なデバッグ機能が追加されたり、中間コード形式になるといった言語設計思想そのものが変わるなど、様々な点で大幅な機能の追加および削除が行われた。

Visual Basic .NET 2003

対応する.NETのバージョンは.NET Framework 1.1。

Visual Basic 2005

製品名称からは「.NET」という名前がなくなったが、上記のVB.NETと連続性がある言語である。言語仕様が強化され、C# 2.0同様にジェネリックの要素が導入されたほか、パーシャルクラスや演算子のオーバーロードなどがサポートされた。また、開発環境も大きく強化されている。
対応する.NETのバージョンは.NET Framework 2.0であるが、Visual Studio用の拡張をインストールすることで.NET Framework 3.0対応アプリケーションの開発も可能になる。

Visual Basic 2008

同時期にリリースされたC# 3.0に合わせて言語仕様が強化され、構造化照会構文であるLINQや、ラムダ式、匿名型などの要素が追加された。
対応する.NETのバージョンは.NET Framework 3.5（.NET 3.5は3.0および2.0の完全なスーパーセットのため、3.0および2.0のアプリケーション開発も可能となっている）。

Visual Basic 2010

対応する.NETのバージョンは.NET Framework 4.0（3.5、3.0、2.0での開発も可能）。
C#の言語設計者として知られるアンダース・ヘルスバーグ氏が設計に携わり、VBとC#との間の言語間の格差の低減が図られるようになった 。

Visual Basic 2012

.NET Framework 4.5とともに公開。Visual Studio 2012に同梱される。
C# 5.0同様、非同期プログラミングを言語仕様レベルでサポートするAsync/Await構文を導入した。

Visual Basic 2013

.NET Framework 4.5.1とともに公開。Visual Studio 2013に同梱される。
Developer Packをインストールすることで.NET Framework 4.5.2対応アプリケーションの開発も可能になる。