using (...) 문은 try {} finally {}에 대한 구문 설탕입니다.구문 및 try-catch() 사용 - 마지막 반복?
그러나 나는 다음과 같은 아래의 using 문이있는 경우 :
using (FileStream fs = File.Open(path))
{
}
이 지금은이 파일을 열면이 발생할 수있는 예외를 잡으려면을 (이 그것으로 인해 실패 할 수 있다는 점에서 상당히 높은 위험 코드 환경)하지만, 만약 내가 try-catch를 쓰면 반복이 아닌가? 코드가 IL로 컴파일되면 코드가 JIT 될 때 반복이 삭제 될 것이라고 가정합니다.
그러나 파일을 여는 예외를 잡아서 (그래서 내가 사용하려고하는 문장의 범위 밖에서 try-catch를 감싸 야한다) 예외를 잡아서 싶다. 블록 내부의 try-catch.
이렇게하면 CLR이 내부에서 수행하는 작업에 많은 반복을 추가하는 것처럼 보입니다. CLR은 catch 절을 추가합니까?
제 동료는 사용하는 문장이 엉망이라고 주장했는데 (단 하나의 줄이 너무 길어서 코드를 매우 빠르게 변경해야하고 코드의 다른 부분에 액세스 할 필요가 없어서 약간 길었 기 때문에 베이스). 동료는 using 문을 사용하지 않지만 using 문과 try-finally/try-catch-finally 사이에 기능상의 차이점이 있습니까? 나는 WCF 서비스가 마지막으로 값을 반환하는 것에 대해 잘 알려지지 않은 경우를 보았습니다. 해결책은 수표 블록을 사용하는 것이 었습니다. C#에서 이와 비슷한 것이 있습니까?
또 다른 참고 사항은 관리되지 않는 리소스의 IDisposale 소유자를 구현하는 모든 유형입니까? 내 친구와의 토론은 그 대답이 아니오라고 지적했다. (또한이 포럼의 사용 섹션에서 몇 가지 스레드를 읽고, 거기에 아주 좋은 지식이 있습니다.)
결국 지원을 사용합니까? 익명의 스코프 블록을 사용하여 어디에서 사용했는지 알 수 있습니까? 나는 이것에 대해 더 알고 싶다. 따라서 사용하는 블록 (예 : FileSream.Open())에서 파일을 열면이 예외가 발생합니다. using 문이 try/finally를 구현하는 경우 try/catch를 사용하여이를 잡아 두어야합니다. – dotnetdev