Visual Basic 6.0 と Visual Basic .NET との変数の違いについて
サンプル コードのダウンロード (vbmigtips_variable.exe, 82.7 KB)
Visual Basic 6.0 と Visual Basic .NET のそれぞれで使用される変数には幾つか違いがあります。Visual Basic 6.0 で使用できた変数が使えなくなる場合や、同じ変数名でも、格納される値が異なる場合などがあります。そこで今回、各環境内で使用される変数の相違について紹介します。
図1 の「結果」ボタン (図1) をクリックするとメッセージボックスが表示される EXE を作成する場合、Visual Basic 6.0 での実装コードは以下のとおりです。
図1
Private Sub Command1_Click()
Dim result As Variant
If IsNumeric(Me.Text1.Text) = True And IsNumeric(Me.Text2.Text) = True Then
Dim a As Integer
Dim b As Integer
a = Me.Text1.Text
b = Me.Text2.Text
result = a ^ b
Else
result = "数値を入力してください"
End If
MsgBox result, vbOKOnly, "結果"
End Sub
|
リスト1
テキストボックスに入力したデータが数値として認識する場合は結果を表示しますが、認識しない場合は「数値を入力してください」というメッセージを表示します。では、リスト1 の各データ型は、Visual Basic .NET ではどのように記述すればよいのでしょうか。今回は、アップグレードウィザードを活用して Visual Basic .NET に変換されたコードを参考に見ていきましょう。
Visual Basic 6.0 で作成したリスト1 のプロジェクトを、Visual Studio .NET で開きます。すると、自動的にウィザードが起動し、指示に従った操作を行うと、コードが変換されます。下記のコードは、アップグレードウィザードによって変換されたコードです。
Private Sub Command1_Click(ByVal eventSender As System.Object, ByVal eventArgs As System.EventArgs) Handles Command1.Click
Dim result As Object
Dim a As Short
Dim b As Short
If IsNumeric(Me.Text1.Text) = True And IsNumeric(Me.Text2.Text) = True Then
a = CShort(Me.Text1.Text)
b = CShort(Me.Text2.Text)
result = a ^ b
Else
result = "数値を入力してください"
End If
MsgBox(result, MsgBoxStyle.OKOnly, "結果")
End Sub
|
リスト2
Visual Basic 6.0 で、どのような型のデータでも格納することができる汎用データ型としてバリアント型 (Variant) があります。しかし、Visual Basic .NET では、バリアント型が オブジェクト型 (Object) に変更されます。
Visual Basic .NET では、整数型 (Integer) が短整数型 (Short) に変更されました。Visual Basic .NET では、整数型や長整数型の数値変数に格納されるデータサイズが変更されたためです。Visual Basic 6.0 で 16 ビットの数値が格納されていた整数型は、Visual Basic .NET では 32 ビットの数値が格納され、32 ビットの符号付数値が格納されていた長整数型は、64 ビットの符号付数値が格納されます。これにより、Visual Basic 6.0 で整数型変数は、Visual Basic .NET では短整数型に、長整数型は整数型に変更されます。
Visual Basic 6.0 と Visual Basic .NET で使用される変数の違いは、以下のサイトの一覧を参照してください。
https://www.microsoft.com/japan/msdn/vbasic/techinfo/upgrade/transition/default.asp#language
また、リスト1 とリスト2 を比べてわかるように、変数 a と変数 b の宣言場所が変更されました。Visual Basic 6.0 では、変数の宣言されている行からプロシージャの末尾まで参照することができるのに対し、Visual Basic .NET では、変数を宣言したブロック内でのみ参照することができるからです。