■ 変数宣言の変更

  • Option Explicit On がデフォルト
  • Dim x, y, z As String
  • ブロック内の変数のスコープ

変更ポイント

Option Explicit (変数宣言の強制)

変数宣言を強制するために、Option Explicit On を利用します。また、Visual Basic .NET では 「Option Explicit On」 がデフォルトになりました。つまり変数宣言を強制されたくない場合には、Option Explicit Off と明示的にソースコードに記述する必要があります。

変数宣言時の型指定

                  
Dim x, y, z As String

この宣言は、Visual Basic 6.0 では、2 つの Variant 型データ (x と y) と、ひとつの String 型データ (z) の生成を意味します。

Visual Basic .NET では、この宣言で 3 つの String 型データが生成されます。

変数のスコープ

Visual Basic 6.0 では、ローカル変数の宣言が含まれている行からプロシージャの末尾まで、ローカル変数を参照することができます。

Visual Basic .NET では、ブロック内で宣言されている変数は、そのブロック内のみ利用可能です (リスト 1)。

Dd297701.list1(ja-jp,MSDN.10).gif

リスト 1:VB .NET の変数スコープ

変数宣言が強制されている場合、スコープ外での変数の利用はコンパイルエラーになります。

If ステートメントの場合は If の中で宣言したデータを利用できるのは If から Else までになります。

ただし、同じ名前の変数の宣言は、プロシージャの中で 1 度だけしかできません。したがってリスト 2 のコードはコンパイルエラーになります。

                  
Option Explicit On
  (略) 
Sub Proc1()
  Dim a As String
  Dim x As Integer
  If x = 100 Then
    Dim a As String
    a = "Hello"
  End If
End Sub

リスト 2:変数名はプロシージャの中で1度だけ

アップグレードウィザードによる変更点

[Visual Basic 6.0 のコード]

                  
Dim x, y, z As String

[Visual Basic .NET にアップグレード]

                  
Dim x, y As Object
Dim z As String

また、Visual Basic 6.0 で以下のようにブロック内で宣言していたデータは、

                  
Sub Proc1()
    Dim x As Short
    If x = 100 Then
        Dim a As String
        a = "Hello"
    Else
        a = "Hi"
    End If
    a = "Hi"
End Sub

リスト 3 のように、アップグレードウィザードがブロックの外で宣言するように変更してくれます。

Dd297701.list3(ja-jp,MSDN.10).gif

リスト3:スコープの変更を考慮したコードの変更 (アップグレードウィザード)

今、何をしておくべきか?

Visual Basic 6.0 でも変数は適切なデータ型を指定して宣言することが推奨されていました。Visual Basic .NET では、Option Explicit On がデフォルトになります。つまり、Visual Basic 6.0 でも適切なデータ型を指定しておくことで、Visual Basic .NET での変更を最小限に抑えることができます。