Programming/.NET

C#에서 개체는 new로 할당될 수 있습니다.

 

static void Main(string[] args)
{
    MyClass m = new MyClass();
}

 

그런데 개체를 생성하고 난 후 해당 개체를 명시적으로 해제하고자 한다면 개체를 생성한 클래스에서 IDisposable 인터페이스를 상속해 해제에 필요한 Dispose()  메서드를 구현해야 합니다.

 

static void Main(string[] args)
{
    MyClass m = new MyClass();
    m.Dispose();
}

 

class MyClass : IDisposable
{
    public void Dispose()
    {
        this.Dispose();
    }
}

 

직접 구현한 클래스가 아닌 BCL의 다른 클래스라 하더라도 자원해제가 필요한 클래스는 IDisposable 인터페이스를 상속받고 있으므로 Dispose() 메서드를 호출할 수 있습니다. 그러나 Dispose()메서드를 호출하는 구문을 작성했어도 내부적으로 오류가 발생하면 해당 구문이 호출되지 않을 수도 있습니다.

 

static void Main(string[] args)
{
    MyClass m = null;

    try {
        m = new MyClass();
    } catch { } finally {
        m.Dispose();
    }
}

 

그래서 try ~ catch구문을 사용해 오류발생상황과는 상관없이 Dispose()를 호출할 수 있도록 해주거나

 

static void Main(string[] args)
{
    using (MyClass m = new MyClass()) {
        //
    }
}

 

아니면 using으로 감싸는 방법을 쓰는것이 좋습니다. using은 using영역이 끝나는 지점에서 개체의 Dispose() 메서드를 자동으로 호출합니다.

0 0