파일을 추상화하고 포함 된 스트림에 IDisposable
을 구현하는 유형에 대해이 구현을 작성했습니다. 내가 Exception
으로 아무것도하지 않고있어 Exception
스트림 용 일반 IDisposable 래퍼 - 모든 예외를 포착하는 대신
- : 때문에,
public void Dispose() { if (_contentStream == null) return; lock (_contentStreamLocker) { if (_contentStream == null) return; try { _contentStream.Dispose(); } catch (Exception) { //legitimate? - don't let any exception prevent //us from successfully disposing? } _contentStream = null; } }
그래서 내가 분명히 더러운 느낌 : 모든 프로젝트에 사용하기위한 것입니다
하지만 기본 스트림의 동작을 보장 할 수 없으므로 (사용자 지정 구현도 고려해야 함) - 즉 이미 처리되었거나 상태가 wher 인 경우 구현은 폐기가 불가능하다고 결정합니다. - 나는 무엇을 해야할지 실제로 볼 수 없습니다.
분명히 나쁜 구현을 숨기면 안된다.
Stream
의Dispose()
; 하지만 여기에는 반쪽 집이 있다고 생각합니다.특히이 개체가 반드시 스트림을 소유하고 있지 않으므로 항상
Dispose()
을 담당 할 필요는 없습니다. 따라서 스트림이 다른 사람에 의해 처분되었을 때 관용적이어야합니다.분명히, 대부분의 경우 이것은 문제가되지 않습니다.
using
블록에있는 파일을 가져 와서 읽은 다음 그 파일과 함께 처리 한 다음 처리하십시오. 그러나 그 최후의 경우가 있습니다. 그들은 나를 괴롭힌다!처음에는이 코드를
catch(ObjectDisposedException){ }
으로 작성했지만, 이는 비공식적 인 패턴 일뿐입니다.어떻게해야합니까? 예외적 인 꿀꺽 꿀꺽 마술은 나쁜 카르마라는 사실에도 불구하고 이것을 그대로 유지 하시겠습니까? Gulp
ObjectDisposedException
그래도 그렇게 좋지는 않습니까? 또는 나는 꿀꺽 꿀꺽 마시거나 전혀 취급하지 않는 예외를 가져야합니까?모든 경우에서 장점을 볼 수 있습니다. 그 중 어떤 것이 승리하는지 파악할 수 없습니다.
스트림이 수업에 비공개 인 경우 무엇을 처리 했습니까? 스트림이 공개적으로 노출되어 있습니까? – Jodrell
@ Jodrell - 아 질문 - 스트림을 개체로 설정할 수 있습니다. 클래스는 호출자가 파일 객체를 채우고 서비스에 제공하고 서비스에서 파일과 스트림을 동등하게 검색 할 수 있도록 get/set 인터페이스를 구현합니다. 환경은 많이 추상화되어 있습니다. –