try
{
//例外の発生する可能性のある処理
}
catch (Exception ex)
{
//例外の出た場合の処理
}
finally
{
//リソースの開放処理
}
{
//例外の発生する可能性のある処理
}
catch (Exception ex)
{
//例外の出た場合の処理
}
finally
{
//リソースの開放処理
}
しかし、処理の方法が人によりまちまちで、困る場合があります。
たとえば、
- 入力チェックに例外処理を利用している
- 事前にチェックすれば発生しない例外の考慮をしている
- 握りつぶしてはマズイ例外を握りつぶしている
- 例外処理をしているが、資源の解放漏れがある
- そもそも例外の発生を考慮していない
などあります。そこで、何かいいガイドラインは無いかと思って調べてみると、MSDNにそれらしいことが記載してありました。
その中で「Exception 基本クラスからユーザー定義例外を派生しないでください。ほとんどのアプリケーションでは、ApplicationException クラスからカスタム例外を派生します。 」
とありますが、@it掲示板によるとApplicationExceptionからの派生はあまりよくないとのことらしい。
私の解釈は、以下のとおりです。
- 握りつぶしてよい例外以外はcatchしない
- (基本的に無いけど)catchした場合、その例外をまたはシステム共通の例外をthrowしなおす
- 例外処理は一箇所で行う。同時にここでログ(デバッグ用)を出力する(ASP.NETの場合、Application_Error。WindowsFormの場合Application.ThreadExceptionで処理する)
例外のハンドリング方法としてはちょっと古いかも知れませんが、まぁコレが今のところ一番いいかなぁと思っています。
ちょっといまさら感がありますが、例外処理に関してはEnterprise Library(EHAB)があります。今度こっちを調査いてみよう。
あ、資源の解放という点ではfinallyよりusingで処理します(C#)。
0 件のコメント:
コメントを投稿