Using ステートメント (Visual Basic)Using Statement (Visual Basic)

宣言の先頭をUsingをブロックし、必要に応じて、ブロックを制御するシステム リソースを取得します。Declares the beginning of a Using block and optionally acquires the system resources that the block controls.

構文Syntax

Using { resourcelist | resourceexpression }  
    [ statements ]  
End Using  

指定項目Parts

用語Term 定義Definition
resourcelist 指定しないかどうかに必要なresourceexpressionします。Required if you do not supply resourceexpression. この 1 つまたは複数のシステム リソースの一覧表示Usingコンマで区切られたコントロールをブロックします。List of one or more system resources that this Using block controls, separated by commas.
resourceexpression 指定しないかどうかに必要なresourcelistします。Required if you do not supply resourcelist. 参照変数または式で制御するシステム リソースを参照するUsingブロックします。Reference variable or expression referring to a system resource to be controlled by this Using block.
statements 省略可能です。Optional. ステートメントのブロックをUsingブロックが実行されます。Block of statements that the Using block runs.
End Using 必須。Required. 定義を終了、Usingブロックおよびそれによって制御されるすべてのリソースを破棄します。Terminates the definition of the Using block and disposes of all the resources that it controls.

内の各リソース、resourcelist部分が次の構文と部分。Each resource in the resourcelist part has the following syntax and parts:

resourcename As New resourcetype [ ( [ arglist ] ) ]

- または --or-

resourcename As resourcetype = resourceexpression

resourcelist パーツresourcelist Parts

用語Term 定義Definition
resourcename 必須。Required. システム リソースを参照する参照変数をUsingコントロールをブロックします。Reference variable that refers to a system resource that the Using block controls.
New 必要な場合、Usingステートメントがリソースを取得します。Required if the Using statement acquires the resource. 既にリソースを取得する場合は、2 番目の構文を使用します。If you have already acquired the resource, use the second syntax alternative.
resourcetype 必須。Required. リソースのクラスです。The class of the resource. クラスを実装する必要があります、IDisposableインターフェイス。The class must implement the IDisposable interface.
arglist 省略可能です。Optional. インスタンスを作成するコンス トラクターに渡す引数のリストresourcetypeします。List of arguments you are passing to the constructor to create an instance of resourcetype. 参照してくださいパラメーター リストします。See Parameter List.
resourceexpression 必須。Required. 変数または式の要件を満たすシステム リソースを参照するresourcetypeします。Variable or expression referring to a system resource satisfying the requirements of resourcetype. 2 番目の構文を使用する場合は、制御を渡す前に、リソースを取得する必要があります、Usingステートメント。If you use the second syntax alternative, you must acquire the resource before passing control to the Using statement.

RemarksRemarks

場合によって、コードでは、ファイル ハンドル、COM ラッパーの場合は、SQL 接続など、アンマネージ リソースが必要です。Sometimes your code requires an unmanaged resource, such as a file handle, a COM wrapper, or a SQL connection. AUsingられて、コードが完了すると、ブロックがそのような 1 つまたは複数のリソースの破棄を保証します。A Using block guarantees the disposal of one or more such resources when your code is finished with them. これにより、使用するには、他のコードで使用可能なことです。This makes them available for other code to use.

マネージ リソースは、ユーザー側で余分なコーディングなし、.NET Framework ガベージ コレクター (GC) によっての破棄されます。Managed resources are disposed of by the .NET Framework garbage collector (GC) without any extra coding on your part. 必要はありません、Usingマネージ リソースをブロックします。You do not need a Using block for managed resources. ただし、引き続き使用できます、Using強制的にガベージ コレクターを待つのではなくマネージ リソースの破棄をブロックします。However, you can still use a Using block to force the disposal of a managed resource instead of waiting for the garbage collector.

AUsingブロックには 3 つの部分: 取得、使用状況、および破棄します。A Using block has three parts: acquisition, usage, and disposal.

  • 買収変数を作成して、初期化、システムのリソースを参照することを意味します。Acquisition means creating a variable and initializing it to refer to the system resource. Usingステートメントが 1 つまたは複数のリソースを取得するか、ブロックに入る前に正確に 1 つのリソースを入手してに提供することができます、Usingステートメント。The Using statement can acquire one or more resources, or you can acquire exactly one resource before entering the block and supply it to the Using statement. 指定した場合resourceexpression、制御を渡す前に、リソースを取得する必要があります、Usingステートメント。If you supply resourceexpression, you must acquire the resource before passing control to the Using statement.

  • 使用状況リソースにアクセスし、それを使ってアクションを実行することを意味します。Usage means accessing the resources and performing actions with them. 間にあるステートメントUsingEnd Usingリソースの使用量を表します。The statements between Using and End Using represent the usage of the resources.

  • 廃棄を呼び出す方法、Disposeメソッド内のオブジェクトをresourcenameします。Disposal means calling the Dispose method on the object in resourcename. これにより、そのリソースを正常に終了するオブジェクト。This allows the object to cleanly terminate its resources. End Usingステートメントを下にあるリソースの破棄、Usingブロックのコントロール。The End Using statement disposes of the resources under the Using block's control.

動作Behavior

AUsingブロックのように動作するTry.Finallyを構築、Tryブロックはリソースを使用し、Finallyそれらのブロックを破棄します。A Using block behaves like a Try...Finally construction in which the Try block uses the resources and the Finally block disposes of them. このため、Usingブロックがブロックを終了する方法に関係なく、リソースの破棄を保証します。Because of this, the Using block guarantees disposal of the resources, no matter how you exit the block. これは、未処理の例外の場合にも当てはまりますを除き、StackOverflowExceptionします。This is true even in the case of an unhandled exception, except for a StackOverflowException.

によって取得されたすべてのリソース変数のスコープ、Usingステートメントに制限されていますが、Usingブロックします。The scope of every resource variable acquired by the Using statement is limited to the Using block.

1 つ以上のシステム リソースを指定する場合、Usingを入れ子にする場合と同じステートメントでは、効果はUsing互いをブロックします。If you specify more than one system resource in the Using statement, the effect is the same as if you nested Using blocks one within another.

場合resourcenameNothingへの呼び出しがないDisposeが行われると例外はスローされません。If resourcename is Nothing, no call to Dispose is made, and no exception is thrown.

構造化例外処理を使用してブロック内でStructured Exception Handling Within a Using Block

内で発生する例外を処理する必要があるかどうか、Usingブロック、完全なを追加するTry.Finallyを構築します。If you need to handle an exception that might occur within the Using block, you can add a complete Try...Finally construction to it. ケースを処理する必要がある場合で、Usingステートメントがリソースの取得中に失敗した、かどうかをテストできますresourcenameNothingします。If you need to handle the case where the Using statement is not successful in acquiring a resource, you can test to see if resourcename is Nothing.

構造化例外処理を使用してブロックではなくStructured Exception Handling Instead of a Using Block

場合は、リソースの取得をより細かく制御する必要がありますまたはでコードを追加する必要があります、Finallyブロック、書き直すことができます、Usingとしてブロック、 Try.Finally構築します。If you need finer control over the acquisition of the resources, or you need additional code in the Finally block, you can rewrite the Using block as a Try...Finally construction. 次の例では、スケルトンTryUsingの取得と破棄に相当する構造resourceします。The following example shows skeleton Try and Using constructions that are equivalent in the acquisition and disposal of resource.

Using resource As New resourceType   
    ' Insert code to work with resource.  
End Using  
  
' For the acquisition and disposal of resource, the following  
' Try construction is equivalent to the Using block.  
Dim resource As New resourceType  
Try   
    ' Insert code to work with resource.  
Finally   
    If resource IsNot Nothing Then  
        resource.Dispose()   
    End If  
End Try   

注意

内のコード、Usingブロック内のオブジェクトを割り当てないでくださいresourcename別の変数にします。The code inside the Using block should not assign the object in resourcename to another variable. 終了すると、Usingブロック、リソースが破棄され、その他の変数が指すリソースにアクセスできません。When you exit the Using block, the resource is disposed, and the other variable cannot access the resource to which it points.

Example

次の例では、log.txt という名前をファイルに 2 つの行のテキストを書き込むファイルを作成します。The following example creates a file that is named log.txt and writes two lines of text to the file. 例では、同じファイルを読み取るし、行のテキストが表示されます。The example also reads that same file and displays the lines of text.

TextWriterTextReaderクラスの実装、IDisposableインターフェイス、コードで使用できるUsingステートメントをファイルが正しく、書き込み後に終了し、読み取り操作ことを確認します。Because the TextWriter and TextReader classes implement the IDisposable interface, the code can use Using statements to ensure that the file is correctly closed after the write and read operations.

Private Sub WriteFile()
    Using writer As System.IO.TextWriter = System.IO.File.CreateText("log.txt")
        writer.WriteLine("This is line one.")
        writer.WriteLine("This is line two.")
    End Using
End Sub

Private Sub ReadFile()
    Using reader As System.IO.TextReader = System.IO.File.OpenText("log.txt")
        Dim line As String

        line = reader.ReadLine()
        Do Until line Is Nothing
            Console.WriteLine(line)
            line = reader.ReadLine()
        Loop
    End Using
End Sub

関連項目See also