다음과 같은 경우 DisisableObject에 IDisposeable이 여전히 호출되거나 처리되지 않은 예외가 발생하여 개체가 열린 상태로 유지됩니까?Using 문에서 처리되지 않은 예외가 발생하면 호출되는 IDisableable입니까?
using (DisposeableObject = new Object())
{
throw new Exception("test");
}
다음과 같은 경우 DisisableObject에 IDisposeable이 여전히 호출되거나 처리되지 않은 예외가 발생하여 개체가 열린 상태로 유지됩니까?Using 문에서 처리되지 않은 예외가 발생하면 호출되는 IDisableable입니까?
using (DisposeableObject = new Object())
{
throw new Exception("test");
}
MSDN, yes에 따르면. 컨트롤이 using
문 범위를 벗어날 경우 처리가 취소 될 것으로 예상하십시오.
예외가 발생하면 개체가 범위에서 벗어날 때 삭제됩니다.
은 참조 : using Statement (C# Reference)
using 문은 폐기 당신이 객체에 메소드를 호출하는 동안 예외가 발생하더라도라고 보장합니다. try 블록 안에 객체를 넣은 다음 finally 블록에서 Dispose를 호출하여 동일한 결과를 얻을 수 있습니다. 실제로 이것은 using 문이 컴파일러에 의해 어떻게 변환되는지입니다.
using
는 try...finally
에 코드를 포장하고, 마지막으로, 이렇게 네,이 호출 할 필요가에서 폐기 같다.
try..finally 블록으로 확장하면 use, Dispose가 호출됩니다.
Dispose를 제공 한 예제에서 예외가 발생하기 전에 호출됩니다. using이 문은 성가신 문을 작성할 필요가 대체
var connection= new SqlConnection(connectionString);
try
{
// do something with the connection here
}
finally
{
connection.Dispose();
}
처럼
는
불려 가도록 처분을 보장하기위한 일반적인 코드가 보인다.
using(var connection = new SqlConnection(connectionString))
{
// do something with the connection here
}
가능한 복제본은 http://stackoverflow.com/questions/1404769/when-would-dispose-method-not-get-called입니다. – SRM