none
C# クラス呼出について RRS feed

  • 質問

  • 下記のように   public class 共通クラスの中に共通クラス Cls_a のインスタンスを作成し、public int aaa()からCls_a.Empty_Get()を

    呼出そうとすると、System.StackOverflowException' のハンドルされていない例外が abc.exe で発生しました。となってしまいます。

    要するに、共通クラスから自分自身を呼出したいのですが、どうすればよろしいでしょうか?

    public class 共通クラス
        {
            共通クラス Cls_a = new 共通クラス();

             public void Empty_Get(string sTarget_V, int iTarget_ren ,ref string Rtn_V)
            {処理1}

         public int aaa()

         {Cls_a.Empty_Get(Office_Rtn, 22, ref Rtn_V);}

      }    

    2013年6月27日 8:07

回答

  • このコードでは無限ループに陥ってしまい、結果としてオーバーフローし、System.StackOverflowExceptionという例外が生成されています。
    自分内で自分自身を呼び出すのは、再帰呼び出しと言います。「再帰呼び出し」、「再帰処理」なんかで検索してみて下さい。いろいろ見つかると思いますので、自分にとってわかりやすい記事を見つけられると良いと思います。

    再帰呼び出しをした場合には、必ずどこかで終了条件を満たし、無限ループにならないようにしなければなりません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク 星 睦美 2013年7月1日 6:14
    2013年6月27日 8:22
    モデレータ
  • デバッガーでエラー発生時の呼び出し履歴を見れば、何が起こっているのかわかると思います。

    根本の原因はクラス設計が間違っています。「共通クラス」という考え方が間違っています。クラスというものは何らかのデータとそれに対する処理メソッドで構成されるため、「共通」ということはあり得ません。

    そこが間違っているため「new 共通クラス();」というコードを挙げられていますが、共通なものを新たに(new)1つ作るという意味不明なコードになってしまっています。

    ところで、質問内容とタイトルは一致させてください。先のスレッドと質問内容に大差がないのであればスレッドを分けるべきではありませんし、新たにStackOverflowExceptionについて質問したいのであれば、タイトルにも反映させてください。

    • 編集済み 佐祐理 2013年6月27日 9:13 加筆した
    • 回答としてマーク 星 睦美 2013年7月1日 6:14
    2013年6月27日 9:09

すべての返信

  • このコードでは無限ループに陥ってしまい、結果としてオーバーフローし、System.StackOverflowExceptionという例外が生成されています。
    自分内で自分自身を呼び出すのは、再帰呼び出しと言います。「再帰呼び出し」、「再帰処理」なんかで検索してみて下さい。いろいろ見つかると思いますので、自分にとってわかりやすい記事を見つけられると良いと思います。

    再帰呼び出しをした場合には、必ずどこかで終了条件を満たし、無限ループにならないようにしなければなりません。


    ★良い回答には回答済みマークを付けよう! わんくま同盟 MVP - Visual C# http://d.hatena.ne.jp/trapemiya/

    • 回答としてマーク 星 睦美 2013年7月1日 6:14
    2013年6月27日 8:22
    モデレータ
  • デバッガーでエラー発生時の呼び出し履歴を見れば、何が起こっているのかわかると思います。

    根本の原因はクラス設計が間違っています。「共通クラス」という考え方が間違っています。クラスというものは何らかのデータとそれに対する処理メソッドで構成されるため、「共通」ということはあり得ません。

    そこが間違っているため「new 共通クラス();」というコードを挙げられていますが、共通なものを新たに(new)1つ作るという意味不明なコードになってしまっています。

    ところで、質問内容とタイトルは一致させてください。先のスレッドと質問内容に大差がないのであればスレッドを分けるべきではありませんし、新たにStackOverflowExceptionについて質問したいのであれば、タイトルにも反映させてください。

    • 編集済み 佐祐理 2013年6月27日 9:13 加筆した
    • 回答としてマーク 星 睦美 2013年7月1日 6:14
    2013年6月27日 9:09
  • A_M_Scofield さん、こんにちは
    フォーラム オペレーターの星 睦美です。

    先に投稿された「C# クラスからクラスの呼出しについて」の回答でもしかしたら、こちらのスレッドでの質問も解決されているのではないかと思います。今回はいったん[回答としてマーク]して回答を終了させていただきますね。

    もし「C# クラスからクラスの呼出しについて」と異なる点を質問されている場合には、[回答としてのマークの解除]をして
    質問を続けることができます。その場合は質問したい点をタイトルと内容で分かりやすくなるように追記いただければと思います。

    それでは今後ともMSDN フォーラムをお役立てください。


    日本マイクロソフト株式会社 フォーラム オペレーター 星 睦美

    2013年7月1日 6:28