C#のtryの入れ子についての疑問

このQ&Aのポイント
  • C#でのtry文の入れ子について疑問があります。具体的には、try文の入れ子でエラーが発生した場合、どのcatch文が処理されるのか、そしてfinally文はどの段階で処理されるのかが気になります。
  • 例えば、メソッドaaa()内でメソッドbbb()を呼び出し、bbb()内でエラーが発生した場合、aaa()のcatch文が処理されるのか、bbb()のcatch文が処理されるのかが分かりません。同様に、finally文はどの段階で処理されるのかも知りたいです。
  • このような場合、エラーが発生した時点で処理が終了してしまうのか、または例外が発生しても処理が続行されるのか理解できません。C#のtry文の入れ子について詳しく教えてください。
回答を見る
  • ベストアンサー

c# の try の入れ子

try の入れ子はどちらで処理されるのでしょうか? 例 public aaaa() { try(){ bbbb(); } catch(){ } finary(){ } } private bbbb() { try(){ xxxxx ← ここでエラーになる } catch(){ } finary(){ } } この場合、 catch()処理は aaaa() の catch() を行う?それとも bbbb() ? finary() ()処理は aaaa() の finary() を行う?それとも bbbb() ?

質問者が選んだベストアンサー

  • ベストアンサー
  • wormhole
  • ベストアンサー率28% (1621/5657)
回答No.3

エラー箇所でスローされたものと、catchでキャッチするものにもよるので回答できません。 基本は次のurlでも読んでください。 http://msdn.microsoft.com/ja-jp/library/s7fekhdy%28v=vs.80%29.aspx

その他の回答 (2)

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.2

まず, この質問文にあるプログラムは間違っています. 「finally()」という書き方はできませんし, 「catch()」も文法的に不正です. そして, この「catch()」が不正であることから, 「このプログラムにおいて」「catch() は bbbb() の方で実行され」るかどうかを判断することは不可能です. だから #1 では「発生した例外を受け取れる catch が受け取る」という, 一般的な原則しか書いていません... ん~, 正確には 「発生した例外を受け取れる, 一番内側の try に付随する catch が受け取る」 か. finally は (ここも文法的には不正だが) 最終的に両方とも実行されます.

  • Tacosan
  • ベストアンサー率23% (3656/15482)
回答No.1

finary じゃなくって finally では? そして発生した例外を受け取れる catch が受け取る. finally の部分は, try ブロックを抜け出すときには必ず実行される.

yamada009
質問者

補足

finally の間違いです。 それで結局catch() は bbbb() の方で実行され finally() は aaaa() bbbb() の両方で実行されるということでしょうか?

関連するQ&A

  • try catchについて

    try catchの動きで質問があります。 以下が簡略化したソースです。 -------ここから--------------------- ストリーム1; ストリーム2; try{ try{ //ストリーム1を使った処理 }catch(IOException e){ throw e; }finally{ //ストリーム1のクローズ } try{ //ストリーム2を使った処理 }finally{ //ストリーム2のクローズ } } catch(IOException e){ throw new hogeException(); } ------ここまで-------------------------- 内側でスローされた例外は、外側でcatchされるのですか? また、内側でcatchをしなかった場合、外側でcatchされるのですか? この2点を教えていただきたいです。 よろしくお願いします。

    • ベストアンサー
    • Java
  • try{}catch(){}とデストラクタの関係を教えてください。

    try-catchでメモリ確保を含むクラスをスローした場合、デストラクタはどの時点で働くのか、教えてください。たとえば、↓の使いかたは大丈夫でしょうか? 【1】 try{  throw(CError(100, "エラー情報")); }catch(CError& err){  //ここでerrを参照しても問題ないのでしょうか? } 【2】 try{  CError err(100, "エラー情報");  throw(err); // (1) }catch(CError& err){  //ここでerrを参照しても問題ないのでしょうか?  //まだデストラクタはちゃんと動作するのでしょうか?  //catchが呼び出し元のメンバであったりしても大丈夫なのでしょうか? } 宜しくお願いします。

  • シングルコーテーション(')とダブルコーテーション(")の入れ子について

    HTMLにおける、シングルコーテーション(')とダブルコーテーション(")の入れ子について教えてください。 例) document.write('<img src="http://xxxxx" onMouseOver="aaaaaa(#bbbb#)">'); 上記の#の部分は何を使えば良いですか? また、更に入れ子にする場合は、どのような感じになりますか?

    • ベストアンサー
    • HTML
  • 【VC2005】サブルーチンを同一プロジェクト中の他の****.hから呼び出せませんか?

    VC超超初心者です。 あるサブルーチンのソースコードをAAAA.h内に private : System::Void XXXXX(){     ※中身省略 } という具合に書いていました。 AAAA.hだけでなく、BBBB.hからもサブルーチンXXXXX()を 呼ぶ必要になったため、 上記のprivate → public に変更しましたが、 BBBB.h内では、XXXXX()を認識しません、とエラーが出てきます。 どうしたらよいか、どなたか教えて頂けませんでしょうか? よろしくお願いします。

  • [JAVA]try 内の変数を外で!?

    お世話になります! try{ int rsCount = ... ... }catch(Exception e){ ... } out.println(rsCount); とした場合、初期化されていない可能性があるとかで使えません。 try catch 内で定義したものは使えないのですか?? 反対に、どうすれば解決できますか?

    • ベストアンサー
    • Java
  • 2つの“try ~ catch”

    こんにちは。 Javaの簡単なネットゲームのサンプルで勉強しています。 ゲームに使う変数[プレイヤー名、プレイヤー座標X,Y プレイヤー残体力]は、プレイヤーごとにハッシュテーブルに格納されることがわかりました。 JavaのハッシュテーブルのデータをJSObjectを使ってJavaScriptに渡したいのですが、ハッシュテーブルも、 JSObjectも try~catch を使っています。 ハッシュテーブルのtry~catch内でなければゲームに使う変数は取得できないと思うのですが、try~catch にJSObjectのtry~catchを入れ子にするようなプログラムの組み方がわかりません。 このような場合どのように組むのでしょうか? ご教授ください。

  • 例外処理

    デバッグをしてみました。 すると,try・catch文までしか実行されていないことがわかりました。 public void init() { try { jbInit(); } catch(Exception e) { e.printStackTrace(); } } 例外処理について調べてはみたものの、なぜこの部分で実行が止まってしまうのか、 解決につながるようなことが,みつかりません。 1.例外処理はどのような処理なのか 2.なぜ、try・catchで実行が終了してしまうのか 教えてください。

    • ベストアンサー
    • Java
  • C++のtryとcatch

    C++で、例外処理としてtryがあるのですが、どういった使い方をするのでしょうか? それと、catchも使い方がわかりません。 どなたか教えてください。 よろしくお願いします。

  • 例外処理(try...catch...)ができない?

    (1/2) 文末のように、よくある(1) 和暦→西暦、(2) 西暦→和暦 変換スクリプトで、 nullだったり半角数字だったりした場合のエラー処理として、 (1) は、次のようにしたらOKでした。 try{ alert("西暦"+wareki+"年"); } catch(e) { alert( "エラーです。入力した値を確認して下さい。" ); } しかし、(2) は同様に次のようにしても、nullや半角英字だったりすると スクリプトエラーになってしまいます(例外処理されない) try{ alert(seireki1+seireki+"年"); } catch(e) { alert( "エラーです。入力した値を確認して下さい。" ); } どこに誤りがあるのでしょうか?よろしくお願い致します。

  • try catch 文について

    jcpadでプログラムを組んでいます。  コンパイル実行すると 「例外 java.io.IOException は報告されません。スローするにはキャッチまたは、スロー宣言をしなければなりません。」 というエラーがでるのですが、BufferedReaderやDataInputStreamでは 例外処理(try~catch)は必ず書かないといけないんですか?

    • ベストアンサー
    • Java

専門家に質問してみよう