2011-12-30 7 views
1

混乱するタイトルは申し訳ありません。基本的に私はビッグエンディアンで読み込み、BinaryReaderクラスを作ったとして、コンストラクタを設定します。私はあなたが基本クラスのコンストラクタ他の方法を呼び出すことはできませんと言われた試してください、ベースコンストラクタを呼び出すコンストラクタをキャッチしてください。

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

、これが最善の方法にあったことそれをやる。

問題は、私が読み込もうとしているファイルを他のプログラムが制御しているときに、エラーメッセージが表示されないことです。(プログラミングが初めてで、try catch文も設定していません。 )。だから、私はtry-catchステートメントを使ってすべての可能な状況を説明しようとしています。私は以前にそれらを使用したことがないので、私はそれにいくつかのポインターを得ることができたと思っていた。

私はプログラム全体の多くの場所でbinaryreader2クラスを作成しましたが、私が使った場所のそれぞれではなく、binaryreaderクラス自体の中にtry catchを設定できることを期待していました。これを行うことは可能ですが、依然として基本クラスのコンストラクタを呼び出しますか?

+0

* *は基本クラスですか? .NETフレームワークの一部または独自の作成? – Adam

+2

ストリームをお持ちの場合は、既にファイルを開いているので、ここで守ろうとしているのは何ですか?いいえ:ベースコールの呼び出し中にtry/catchを追加することはできません。 –

+0

@MarcGravell、ああ、そうだよ。私はFile.Open(パス)を渡します...私はそれを見たはずです。実際に質問に答えてくれてありがとう。 – mowwwalker

答えて

1

考えられる回避策:継承より合成を使用します。この方法で、以前のベースオブジェクトの初期化をより適切に制御できます。

+0

参考資料:http://c2.com/cgi/wiki?CompositionInsteadOfInheritance –

0

これまで私が使ったことはありませんでしたので、私はそれにいくつかの参考になることを期待していました。一般プットに

  • 何かのために、「外に行く」というコードの周りにキャッチ/試してみてください。あなたのプログラムは制御できません。ファイルを取得中、データベースからアイテムを取得中など。

  • 可能な限り小さなコードで試してください。たとえば、Tryでファイルフェッチコールをラップするだけで、それ以降に起こっていることはすべてありません。 I. @Marcは上で述べたように、有効なFileStramオブジェクトがあれば、それをTryブロックに置く必要はありません。

  • 上記を実行すると、非常に特定の例外タイプをキャッチできます。これにより、問題に関する優れたエラーメッセージを表示したり、コードの問題を処理したりするだけで、プログラムが爆発する必要はありません。

  • 新しい例外インスタンスをスローする元の例外を再スローすることの違いを注意深く検討します。

  • 提案:試しに最初のRun()をラップし、Catchブロックで何かを実行してください。 「出版」について学んでください。あなたは例えばあなたに電子メールを送ることができます。例外をデータベースに格納し、ログファイルに書き込みます。以上により

  • その後、キャッチどこでもアプリケーション内のすべてのに、常に再スロー例外を(上記の私の警告を参照)、あなたはそれで有用な何かを単一のポイントを持っています。

+0

tryキャッチ文の中でファイルストリームを初期化しようとしたとき、初期化されていないと言われたので、他の場所で使用することはできませんでした。最初はnullに設定したときと同じです。 – mowwwalker

+0

"初期化"が何を意味するか分かりません。 tryブロックで宣言した場合、スコープはそのブロックに限定されます。 – radarbob

関連する問題