2016年6月1日水曜日

[C#] 例外処理(try〜catch,throwそしてfinally)

こんにちは。明月です。
今日は例外処理について勉強します。例外処理はキーワード名をみればエラーを解決するキーワードみたいですが実はそうではありません。大きくみると全域の分岐というの意味が近いと思われます。
この全域の分岐はエラー処理するところでよく使われるので例外処理と呼ばれるかも知れません。


try〜catch、throw


例外処理はプロセス処理順「try」ブロックの内で「Exception」クラスタイプを「throw」から投げれば「catch」で受け取ります。





上の例をみると「if」文と差がなさそうですね。でも「try〜catch,throw」は「try」ブロックの内で「throw」を発生することを「catch」で受け取るものなので「try」のブロックのメソッド内で「throw」を投げても「catch」で受け取ります。




そして継承関係でも「try〜catch、throw」ができます。すなわち親クラスで「Exception」を「throw」で投げたら派生クラスの「try〜catch」で受け取ることができます。




ここまで確認すると確かに一般分岐と差がありますね。一般分岐の場合は条件によって処理プロセスが変わりますが、「try〜catch、throw」の場合は「try」ブロックの内で「throw」を投げると「catch」にで受け取ることで処理になります。


finally


「try〜catch」の場合は処理中で投げる形態だから「throw」の次のレベルソースが実行しないです。そうことになると必ず実行すべきなソースレベルがある場合に論理的なエラーがなる可能性があります。



上の例を見ると「method」で「Exception」が発生すれば「i++」は実行しないので無限ループになります。(実は例みたいに極端的に実装しない。)
それでエラーが発生(throw)しても無限ループにならないように「finally」キーワードを使います。




「finally」の場合は「try」のブロックの内で返却「return」しても必ず処理するブロックです。なのでプログラムリソースを解除するところでよく使いますね。



0 件のコメント