事前バインディングと遅延バインディング (Visual Basic)Early and Late Binding (Visual Basic)

Visual Basic コンパイラは、オブジェクトがオブジェクトbinding変数に割り当てられたときに呼び出されるプロセスを実行します。The Visual Basic compiler performs a process called binding when an object is assigned to an object variable. オブジェクトが特定のオブジェクト型として宣言された変数に代入される場合、オブジェクトは事前バインディングされます。An object is early bound when it is assigned to a variable declared to be of a specific object type. 事前バインディングされたオブジェクトを使用すると、コンパイラは、アプリケーションを実行する前に、メモリの割り当てとその他の最適化を実行することができます。Early bound objects allow the compiler to allocate memory and perform other optimizations before an application executes. たとえば、次のコードは、FileStream 型の変数を宣言します。For example, the following code fragment declares a variable to be of type 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 に代入されるインスタンスは事前バインディングされます。Because FileStream is a specific object type, the instance assigned to FS is early bound.

対照的に、オブジェクトが Object 型として宣言された変数に代入される場合、オブジェクトは遅延バインディングされます。By contrast, an object is late bound when it is assigned to a variable declared to be of type Object. この型のオブジェクトは、任意のオブジェクトへの参照を保持できますが、事前バインディングされたオブジェクトが持っている多くの利点を欠いています。Objects of this type can hold references to any object, but lack many of the advantages of early-bound objects. たとえば、次のコードは、CreateObject 関数によって返されたオブジェクトを保持するオブジェクト変数を宣言します。For example, the following code fragment declares an object variable to hold an object returned by the CreateObject function:

' 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

事前バインディングの利点Advantages of Early Binding

コンパイラが効率の高いアプリケーションを生成するための重要な最適化を行うことができるため、可能であれば、事前バインディングされたオブジェクトを使用する必要があります。You should use early-bound objects whenever possible, because they allow the compiler to make important optimizations that yield more efficient applications. 事前バインディングされたオブジェクトは遅延バインディング オブジェクトよりもはるかに高速であり、使用されるオブジェクトの種類を正確に記述することでコードを読みやすくして管理を容易にします。Early-bound objects are significantly faster than late-bound objects and make your code easier to read and maintain by stating exactly what kind of objects are being used. 事前バインディングのもう1つの利点は、自動コード補完やダイナミックヘルプなどの便利な機能を有効にすることです。これは、Visual Studio 統合開発環境 (IDE: integrated development environment) では、使用しているオブジェクトの種類を編集時に正確に判別できるためです。コード.Another advantage to early binding is that it enables useful features such as automatic code completion and Dynamic Help because the Visual Studio integrated development environment (IDE) can determine exactly what type of object you are working with as you edit the code. 事前バインディングを使用すると、コンパイラがプログラムのコンパイル時にエラーを報告できるため、ランタイム エラーの数が減少し、重大度が低下します。Early binding reduces the number and severity of run-time errors because it allows the compiler to report errors when a program is compiled.

注意

遅延バインディングは、Public として宣言されている型メンバーにアクセスするためにのみ使用できます。Late binding can only be used to access type members that are declared as Public. Friend または Protected Friend として宣言されているメンバーにアクセスすると、ランタイム エラーが発生します。Accessing members declared as Friend or Protected Friend results in a run-time error.

関連項目See also