다음을 통해 공유


using 문 - 삭제 가능한 개체의 올바른 사용 확인

using 문은 IDisposable 인스턴스의 올바른 사용을 보장합니다.

var numbers = new List<int>();
using (StreamReader reader = File.OpenText("numbers.txt"))
{
    string line;
    while ((line = reader.ReadLine()) is not null)
    {
        if (int.TryParse(line, out int number))
        {
            numbers.Add(number);
        }
    }
}

컨트롤이 문 블록을 using 벗어나면 획득된 IDisposable 인스턴스가 삭제됩니다. 특히 using 문은 using 문의 블록 내에서 예외가 발생하더라도 삭제 가능한 인스턴스가 삭제되도록 합니다. 앞의 예제에서 열린 파일은 모든 줄이 처리된 후에 닫힙니다.

await using 문을 사용하여 IAsyncDisposable 인스턴스를 올바르게 사용합니다.

await using (var resource = new AsyncDisposableExample())
{
    // Use the resource
}

인스턴스 사용에 IAsyncDisposable 대한 자세한 내용은 DisposeAsync 메서드 구현 문서의삭제 가능한 비동기 사용 섹션을 참조하세요.

중괄호가 필요하지 않은 using선언을 사용할 수도 있습니다.

static IEnumerable<int> LoadNumbers(string filePath)
{
    using StreamReader reader = File.OpenText(filePath);
    
    var numbers = new List<int>();
    string line;
    while ((line = reader.ReadLine()) is not null)
    {
        if (int.TryParse(line, out int number))
        {
            numbers.Add(number);
        }
    }
    return numbers;
}

using 선언에서 선언된 경우 지역 변수는 선언된 범위의 끝에서 삭제됩니다. 앞의 예제에서 삭제는 메서드의 끝에서 발생합니다.

C# 언어 참조는 가장 최근에 릴리스된 C# 언어 버전을 문서화합니다. 또한 예정된 언어 릴리스의 공개 미리 보기 기능에 대한 초기 설명서도 포함되어 있습니다.

설명서는 언어의 마지막 세 버전 또는 현재 공개 미리 보기에서 처음 도입된 기능을 식별합니다.

팁 (조언)

C#에서 기능이 처음 도입된 시기를 찾으려면 C# 언어 버전 기록에 대한 문서를 참조하세요.

using 문 또는 선언으로 선언된 변수는 읽기 전용입니다. 다시 할당하거나 매개 변수로 refout 전달할 수 없습니다.

다음 예제와 같이 한 using 문에서 동일한 형식의 여러 인스턴스를 선언할 수 있습니다.

using (StreamReader numbersFile = File.OpenText("numbers.txt"), wordsFile = File.OpenText("words.txt"))
{
    // Process both files
}

using 문에서 여러 인스턴스를 선언하면 선언의 역순으로 삭제됩니다.

using 문 및 선언을 삭제 가능한 패턴에 맞는 ref 구조체의 인스턴스와 함께 사용할 수도 있습니다. 즉, 액세스 가능하고 매개 변수가 없으며 반환 형식이 있는 인스턴스 Dispose 메서드가 있습니다 void .

return 블록 내부는 using 여전히 폐기를 보장합니다. 컴파일러는 이를 try/finally다시 쓰기 때문에 메서드가 실제로 반환되기 전에 리소스 Dispose 가 항상 호출됩니다.

using 문은 다음 형식일 수도 있습니다.

using (expression)
{
    // ...
}

여기서 expression은(는) 삭제 가능한 인스턴스를 생성합니다. 다음 예제에서는 해당 형식을 보여 줍니다.

StreamReader reader = File.OpenText(filePath);

using (reader)
{
    // Process file content
}

Warning

앞의 예제에서 컨트롤이 using 문을 벗어난 후에는 삭제 가능한 인스턴스가 이미 삭제된 동안 범위에 남아 있습니다. 해당 인스턴스를 추가로 사용하는 경우 예외(예: ObjectDisposedException)가 발생할 수 있습니다. 따라서 문 내에서 또는 using 선언을 사용하여 삭제 가능한 변수를 using 선언해야 합니다.

C# 언어 사양

자세한 내용은 C# 언어 사양using 문 섹션을 참조하세요.

참고 항목