나는이 질문을 제기 할 때 토론을 혼란스럽게 할 것이라고 생각했습니다. returning a Disposable (IDisposable
) object from a function에 관한 질문을했습니다. 그럼 내가 호출하기 때문에,나는/일회용품을 사용하는 작업을 이해하지 못합니다.
class UsingTest
{
public class Disposable : IDisposable
{
public void Dispose()
{
var i = 0;
i++;
}
}
public static Disposable GetDisposable(bool error)
{
var obj = new Disposable();
if (error)
throw new Exception("Error!");
return obj;
}
}
내가 이런 식으로 일부러 코드 :
내가 몇 가지 예제 코드를 생성using (var tmp = UsingTest.GetDisposable(true)) { }
디버거를 사용하여, 심지어는 Dispose
방법은 실행 결코 알 이미 Disposable
개체를 인스턴스화했지만 Dispose
의 목적을 정확히 이해하면이 클래스가 실제로 핸들을 열었 으면 비슷한 작업을 마친 즉시 닫지 않을 것입니다.
이 문제는 내가 예상했던 것과 일치하기 때문에 묻습니다. 그러나 관련된 질문에 대한 답변에서 사람들은 using
이 모든 것을 처리 할 것임을 나타 냈습니다.
여전히가이 모든 것을 처리하는 경우 누군가 내가 설명하지 못한 것을 설명 할 수 있습니까? 그러나이 코드가 실제로 리소스 누수를 일으킬 수 있다면 GetDisposable
(IDisposable
개체를 인스턴스화하고 return 문 이전에 예외를 throw 할 수있는 코드를 실행해야한다는 조건으로) 코드를 제안하는 방법은 무엇입니까?
이 맞습니다. IDisposable을 만드는 메서드가 참조를 반환하기 전에 실패 할 수 있으면 dispose가 호출되도록해야합니다. – ScottS