C#의 using(){...}블럭은 using() 안의 객체가 IDisposable 인터페이스를 구현했을 때 사용할 수 있다. using 블럭은 try ... finally 블럭으로 변경되면서 finally 블럭에서 해당 객체의 Dispose() 메서드를 호출한다.
using (SqlConnection cn = new SqlConnection(str)) { //... } // 위의 using은 컴파일러에 의해 다음과 같이 변경된다 SqlConnection cn = null; try { cn = new SqlConnection(str); //.... } finally { if(cn!= null) { ((IDisposable)cn).Dispose(); } }
따라서, C#의 using 블럭은 Unmanaged 리소스를 해제하기 위해 IDisposable 을 구현 클래스의 해제 명령(Dispose 메서드)를 자동으로 호출해 주는 효과가 있다.
[추가질문] 만약 using 블럭 중간에서 에러가 발생했다면, Connection은 어떻게 되는가? [A] 에러가 발생했다면 Connection이 해제되고 (즉 Dispose가 호출되고) 난 후, 에러를 throw한다.