0

次のコンストラクタの初期化の違いを教えてください..

ここで Person はクラスです.その中で、いくつかの値を初期化しようとしています...そして、名前の付いた3つのプロパティを作成しました

「名前、年齢、CanCode」

そして、これの1つを呼び出します..

//Without Static

public Class Person
{

   Person[] people = {
             new Person { Name="Allen Frances", Age=11, CanCode=false },
             new Person { Name="Burke Madison", Age=50, CanCode=true }
   }

   // with Static...    
   /*
   static   Person[] people =
   {
             new Person { Name="Allen Frances", Age=11, CanCode=false },
             new Person { Name="Burke Madison", Age=50, CanCode=true }
   }
   */
   ........... 
}  

キーワードなしでクラス コンストラクターを初期化しようとすると、static「Stack overFlow Exception.」が表示されます。

コードをデバッグすると、ここで Person クラスのオブジェクトを作成した後、初期化に時間がかかりますが、理由がわかりません。

私が知っているのは、staticこれらのキーワードを使用すると、オブジェクトの作成前にコンストラクターデータを初期化することです...しかし、ここでは、オブジェクトの作成後にデータを初期化しようとすると、この動作が示されます..

理由を教えてください...

4

2 に答える 2

4

Person というクラスの定義内にいて、その内部に同じクラスのオブジェクトをさらに作成しようとしているため、スタック オーバーフローが発生しています。これらの Person オブジェクトが作成されると、さらに多くの Person オブジェクトを作成しようとします。

この再帰的な定義は、スタックが無限で決して終わらないため、スタックを吹き飛ばします。

このコード ブロックを定義してみてください。

Person[] people = {
                 new Person { Name="Allen Frances", Age=11, CanCode=false },
                  new Person { Name="Burke Madison", Age=50, CanCode=true }
                    }

コードの別の部分で、おそらくメイン メソッドですか?

于 2012-04-13T06:13:13.753 に答える
0

で試してみてください

Person[] people = new Person[2] {
                 new Person { Name="Allen Frances", Age=11, CanCode=false },
                  new Person { Name="Burke Madison", Age=50, CanCode=true }
                    };
于 2012-04-13T14:32:15.263 に答える