2011-12-30 4 views
1

혼란스러운 제목 죄송합니다. 기본적으로 난 큰 엔디안에 읽는 BinaryReader를 클래스를 만들어으로 생성자를 설정 : 당신이 기본 클래스의 생성자 다른 방법으로 호출 할 수 없습니다 들었다시도하십시오, 기본 생성자를 호출하는 내부 생성자를 캐치하십시오

BinaryReader2(System.IO.Stream strm) : base(strm){} 

, 이것은 최선의 방법에 대한 것을 해.

문제는 다른 프로그램이 내가 읽은려고 파일의 제어 할 때 프로그래밍에 새로운 해요 및 시도의 catch 문을 설정하지 않았기 때문에, 그것은 (오류 메시지를 표시하지 않습니다.). 그래서 try-catch 문을 사용하여 가능한 모든 상황을 설명하려고합니다. 전에는 사용 해본 적이 없기 때문에 몇 가지 정보를 얻을 수 있기를 바랍니다.

나는 프로그램 전반에 걸쳐 많은 장소에서 binaryreader2 클래스를 생성하고 난 BinaryReader를 클래스 자체 내부 대신 내가 그것을 사용 장소의 각에서 시도 캐치를 설정할 수 있습니다 기대했다. 그것을 할 수 있고 여전히 기본 클래스의 생성자를 호출 할 수 있습니까?

+0

기본 클래스 * 어떤 *입니까? .NET 프레임 워크의 일부 또는 자신의 생성? – Adam

+2

스트림이있는 경우 이미 파일을 열었습니다. 여기에서 무엇을 지키려고합니까? 아니오 : 기본 ctor 호출 기간 동안 try/catch를 추가 할 수 없습니다. –

+0

@MarcGravell, 오 그래, 네 말이 맞아. 나는 File.Open (길)에서 지나간다. .. 나는 그것을보아야했다라고 생각한다. 실제로 질문에 대답 해 주셔서 감사합니다. – mowwwalker

답변

1

한 가지 가능한 대안 : 상속을 통한 합성을 사용하십시오. 이 방법을 사용하면 이전의 기본 객체를 초기화하는 데 더 효과적으로 제어 할 수 있습니다.

+0

참고 자료 : http://c2.com/cgi/wiki?CompositionInsteadOfInheritance –

0

이전에는 사용 해본 적이 없기 때문에 몇 가지 정보를 얻을 수 있기를 기대했습니다.

  • 은 일반적으로 넣어에서 뭔가를 "외부 간다"고/코드 주위 캐치를 시도하십시오. 프로그램이 제어 할 수없는 것들. , 파일을 가져 오기 가능한 한 작은 코드로 등, 데이터베이스에서

  • 시도-블록 물건을 받고. 예를 들어 Try에서 파일 가져 오기 호출 만 래핑하면됩니다. I.E. @Marc가 위에서 말했듯이 일단 유효한 FileStram 객체가 있으면 Try 블록에 추가 할 필요가 없습니다.

  • 위와 같은 작업을 수행하면 매우 구체적인 예외 유형을 파악할 수 있습니다. 이렇게하면 문제에 대한 좋은 오류 메시지를 표시하거나 코드의 문제를 처리 할 수 ​​있으므로 프로그램이 터지면 안됩니다.

  • 연구 새로운 예외 인스턴스를 던지는 원래 예외 부회장을 다시 던지는 사이 신중하게 차이.

  • 제안은 : 그것으로 뭔가를 수행 시도와 catch 블록에 초기 실행을() 랩. "출판"에 대해 알아보십시오. 예를 들어 이메일을 보낼 수 있습니다. 예외를 데이터베이스에 보관하고 로그 파일에 기록하십시오. 위의와

  • 다음 캐치 사방 응용 프로그램의 모든에 항상 다시 던져 예외를 (위의 내 경고 참조) 당신은 당신이 그것으로 유용한 일을 할 단일 지점을 가지고있다.

+0

try catch 문 내부에서 파일 스트림을 초기화 할 때 초기 화되지 않았기 때문에 다른 곳에서는 사용할 수 없습니다. 처음에 null로 설정 한 경우와 같습니다. – mowwwalker

+0

"초기화"의 의미를 모릅니다. try 블록에서 선언했다면 범위는 해당 블록으로 제한됩니다. – radarbob

관련 문제