次の方法で共有


アップグレードに関する推奨事項 : 事前バインディングと明示的な型変換の使用

更新 : 2007 年 11 月

Visual Basic 6.0 と Visual Basic 2008 は、いずれも遅延バインディング オブジェクトの使用をサポートしています。これは、変数を Object データ型として宣言し、実行時にクラスのインスタンスに割り当てる手法です。しかし、アップグレード プロセスでは、遅延バインディング オブジェクトが含まれていると、既定プロパティを解決するときや、基になるオブジェクト モデルが変更されてプロパティ、メソッド、イベントを変換する必要がある場合などに、問題が発生することがあります。たとえば、Label1 というラベルを持つ Form1 というフォームがある場合、次の Visual Basic 6.0 コードはラベルのキャプションを "SomeText" に設定します。

Dim o As Object
Set o = Me.Label1
o.Caption = "SomeText"

Visual Basic 2008 では、ラベル コントロールの Caption プロパティは Text プロパティに置き換えられています。コードをアップグレードすると、Caption プロパティのすべてのインスタンスが Text に変更されます。しかし、遅延バインディング オブジェクトには型がないため、Visual Basic はオブジェクトの型を検出できず、変換が必要なプロパティがあるかどうかも確認できません。そのような場合は、アップグレード後にコードを変更する必要があります。

事前バインディングされるオブジェクトを使用してコードを書き換えると、アップグレードが自動的にできるようになります。

Dim o As Label
Set o = Me.Label1
o.Text = "SomeText"

できる限り、変数を単に Object データ型として宣言するのではなく、適切なオブジェクト型の変数として宣言してください。

Visual Basic 6.0 のコードで Object 変数や Variant 変数を使用する場合は、変数を割り当てたり、変数に演算を実行したり、変数を関数に渡したりするときに、明示的な型変換を使用することをお勧めします。たとえば、次のコードでは '+' 演算子の意図が不明確です。

Dim Var1 As Variant
Dim Var2 As Variant
Dim Var3 As Variant
Var1 = "3"
Var2 = 4
'BAD: Should Var1 and Var2 be added as strings or integers?
Var3 = Var1 + Var2

この例は、Visual Basic 2008 ではランタイム エラーになることがあります。次に示すように、最後の行を明示的に変換するように書き換えると、コードが正常に動作するようになります。

'GOOD: explicit conversion
Var3 = CInt(Var1) + CInt(Var2)

Visual Basic 2008 は、パラメータの型に基づいた関数のオーバーロードをサポートしています。たとえば、Environ 関数には 2 つの形式があります。

Environ( Expression As Integer) As String
Environ( Expression As String ) As String

Visual Basic 2008 は、パラメータの型に基づいて、どちらの関数を呼び出すかを決定します。Environ() に整数を渡した場合は、整数を取る方の関数が呼び出されます。文字列を渡した場合は、文字列を取る方の関数が呼び出されます。オーバーロードされた関数に Variant または Object データ型を渡すと、コンパイル エラーやランタイム エラーが発生する可能性があります。次の例に示すような明示的な変換を使用すると、Visual Basic 2008 にアップグレードした後もコードが正しく動作します。

Dim a As String
Dim v As Variant
v = "Path"
'GOOD: explicit conversion
a = Environ(CStr(v))

遅延バインディング オブジェクトに対して明示的な型変換を使用するコードをお勧めします。これによって、コードの意図を解釈しやすくなり、プロジェクトを Visual Basic 2008 にアップグレードするのが簡単になります。

参照

その他の技術情報

言語に関するアップグレード上の推奨事項