Using 문(Visual Basic)Using Statement (Visual Basic)

@No__t-0 블록의 시작을 선언 하 고, 블록에서 제어 하는 시스템 리소스를 선택적으로 가져옵니다.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 @No__t-0을 제공 하지 않는 경우 필요 합니다.Required if you do not supply resourceexpression. Using 블록에서 제어 하는 하나 이상의 시스템 리소스 목록으로, 쉼표로 구분 합니다.List of one or more system resources that this Using block controls, separated by commas.
resourceexpression @No__t-0을 제공 하지 않는 경우 필요 합니다.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. @No__t-0 블록이 실행 하는 문 블록입니다.Block of statements that the Using block runs.
End Using 필수.Required. @No__t-0 블록의 정의를 종료 하 고 제어 하는 모든 리소스를 삭제 합니다.Terminates the definition of the Using block and disposes of all the resources that it controls.

@No__t-0 부분의 각 리소스에는 다음과 같은 구문과 파트가 있습니다.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. @No__t-0 블록에서 제어 하는 시스템 리소스를 참조 하는 참조 변수입니다.Reference variable that refers to a system resource that the Using block controls.
New @No__t-0 문이 리소스를 획득 하는 경우에 필요 합니다.Required if the Using statement acquires the resource. 이미 리소스를 취득 한 경우 두 번째 구문 대체 방법을 사용 합니다.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. @No__t-0의 인스턴스를 만들기 위해 생성자에 전달 하는 인수 목록입니다.List of arguments you are passing to the constructor to create an instance of resourcetype. 매개 변수 목록을 참조 하세요.See Parameter List.
resourceexpression 필수.Required. @No__t-0의 요구 사항을 충족 하는 시스템 리소스를 참조 하는 변수 또는 식입니다.Variable or expression referring to a system resource satisfying the requirements of resourcetype. 두 번째 구문 대체를 사용 하는 경우 Using 문으로 제어를 전달 하기 전에 리소스를 가져와야 합니다.If you use the second syntax alternative, you must acquire the resource before passing control to the Using statement.

설명Remarks

코드에 파일 핸들, COM 래퍼 또는 SQL 연결과 같은 관리 되지 않는 리소스가 필요한 경우도 있습니다.Sometimes your code requires an unmanaged resource, such as a file handle, a COM wrapper, or a SQL connection. @No__t-0 블록은 코드가 완료 될 때 이러한 리소스를 하나 이상 삭제 하는 것을 보장 합니다.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.

관리 되는 리소스는 추가 코딩 없이 GC (.NET Framework 가비지 수집기)에 의해 삭제 됩니다.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.

@No__t-0 블록은 획득, 사용 및 삭제의 세 부분으로 구성 됩니다.A Using block has three parts: acquisition, usage, and disposal.

  • 취득 은 변수를 만들고 초기화 하 여 시스템 리소스를 참조 하는 것을 의미 합니다.Acquisition means creating a variable and initializing it to refer to the system resource. @No__t-0 문은 하나 이상의 리소스를 얻거나, 블록을 입력 하기 전에 리소스를 하나만 가져와 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. @No__t를 제공 하는 경우 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. @No__t-0과 End Using 사이의 문은 리소스 사용을 나타냅니다.The statements between Using and End Using represent the usage of the resources.

  • 삭제 는 @no__t에서 개체에 대 한 Dispose 메서드를 호출 하는 것을 의미 합니다.Disposal means calling the Dispose method on the object in resourcename. 이렇게 하면 개체가 리소스를 완전히 종료할 수 있습니다.This allows the object to cleanly terminate its resources. @No__t-0 문은 Using 블록의 컨트롤에 있는 리소스를 삭제 합니다.The End Using statement disposes of the resources under the Using block's control.

동작Behavior

@No__t-0 블록은 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.

@No__t-0 문이 획득 한 모든 리소스 변수의 범위는 Using 블록으로 제한 됩니다.The scope of every resource variable acquired by the Using statement is limited to the Using block.

@No__t-0 문에서 둘 이상의 시스템 리소스를 지정 하는 경우에는-1이 다른 블록 내에서 블록을 @no__t 중첩 한 것과 같은 효과를 가집니다.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.

@No__t-0 Nothing 이면 Dispose에 대 한 호출이 수행 되지 않고 예외가 throw 되지 않습니다.If resourcename is Nothing, no call to Dispose is made, and no exception is thrown.

Using 블록 내에서 구조적 예외 처리Structured Exception Handling Within a Using Block

@No__t-0 블록에서 발생할 수 있는 예외를 처리 해야 하는 경우 전체 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. @No__t-0 문이 리소스를 획득할 수 없는 경우를 처리 해야 하는 경우를 테스트 하 여 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.

Using 블록 대신 구조적 예외 처리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. 다음 예제에서는 resource의 획득 및 삭제에 해당 하는 기본 TryUsing 구문을 보여 줍니다.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

참고

@No__t-0 블록 내의 코드는 resourcename의 개체를 다른 변수에 할당 하면 안 됩니다.The code inside the Using block should not assign the object in resourcename to another variable. @No__t-0 블록을 종료 하면 리소스가 삭제 되 고 다른 변수는 가리키는 리소스에 액세스할 수 없습니다.When you exit the Using block, the resource is disposed, and the other variable cannot access the resource to which it points.

예제Example

다음 예에서는 .log 라는 파일을 만들고 두 줄의 텍스트를 파일에 씁니다.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:

@No__t-0 및 TextReader 클래스는 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