事前バインディングと遅延バインディング
更新 : 2007 年 11 月
Visual Basic コンパイラは、オブジェクトがオブジェクト変数に代入されるときに binding と呼ばれる処理を実行します。オブジェクトが特定のオブジェクト型として宣言された変数に代入される場合、オブジェクトは事前バインディングされます。事前バインディングされたオブジェクトでは、アプリケーションが実行される前に、コンパイラによってメモリの割り当てとその他の最適化が実行されます。たとえば、次のコード例では FileStream 型の変数を宣言しています。
' Create a variable to hold a new object.
Dim FS As System.IO.FileStream
' Assign a new object to the variable.
FS = New System.IO.FileStream("C:\tmp.txt", _
System.IO.FileMode.Open)
FileStreamは特定のオブジェクト型であるため、FS に代入されるインスタンスは事前バインディングされます。
対照的に、オブジェクトが Object 型として宣言された変数に代入される場合は、遅延バインディングされます。この型のオブジェクトは、任意のオブジェクトへの参照を保持できますが、事前バインディングされたオブジェクトの利点をほとんど持ちません。たとえば、次のコード例では、CreateObject 関数で返されたオブジェクトを保持するオブジェクト変数を宣言しています。
' To use this example, you must have Microsoft Excel installed on your computer.
' Compile with Option Strict Off to allow late binding.
Sub TestLateBinding()
Dim xlApp As Object
Dim xlBook As Object
Dim xlSheet As Object
xlApp = CreateObject("Excel.Application")
' Late bind an instance of an Excel workbook.
xlBook = xlApp.Workbooks.Add
' Late bind an instance of an Excel worksheet.
xlSheet = xlBook.Worksheets(1)
xlSheet.Activate()
' Show the application.
xlSheet.Application.Visible = True
' Place some text in the second row of the sheet.
xlSheet.Cells(2, 2) = "This is column B row 2"
End Sub
事前バインディングの利点
可能な場合は、事前バインディングされたオブジェクトを使用してください。これによって、コンパイラは、アプリケーションをより効率的にする重要な最適化を実行できます。事前バインディングされたオブジェクトは遅延バインディングされたオブジェクトよりも処理が高速です。また、使用されているオブジェクトの種類が明確になるため、コードがより読みやすくなり、保守も簡単になります。事前バインディングのその他の利点として、自動コード補完やダイナミック ヘルプなどの便利な機能が有効になります。これは、Visual Studio の統合開発環境 (IDE) により、コードの編集中に作業しているオブジェクトの種類が正確に判断されるためです。事前バインディングを使用すると、プログラムのコンパイル時にコンパイラがエラーを報告できるため、ランタイム エラーの数が減少し、エラーの重大性も低下します。
メモ : |
---|
遅延バインディングを使用できるのは、Public として宣言されている型メンバにアクセスするときだけです。Friend または Protected Friend として宣言されたメンバにアクセスすると、ランタイム エラーになります。 |