2011-09-30 8 views
5

私はUserクラスを持っています。プロパティの1つは「関連する」ユーザーである必要があります。したがって、タイプはユーザーである必要があります。今すぐクラスを初期化すると、Associatedプロパティを初期化しようとするとスタックオーバーフローが発生します。現在のコード:独自のコンストラクタで新しいクラスを初期化する

public class User { 
    public User() { 
     this.Associated = new User(); 
    } 

    public User Associated { get; set; } 
} 

私は間違った木を吠えますか?

+1

関連付けられたユーザーの有効なデフォルト値がnullでないのはなぜですか? – user957902

+0

関連付けられているUserクラスには、関連付けられていないUserの場合でも必要なデフォルト値があります。 –

答えて

4

あなたが集約さUserクラスの遅延ロードされたメソッドを使用して、コンストラクタでそれを初期化できませんでした:

public class User { 
    private User _user; 

    public User Associated 
    { 
     get 
     { 
      if (_user == null) 
       _user = new User(); 
      return _user; 
     } 
    } 
} 
+0

私に必要な回避策を与えるために受け入れられました。ありがとう。 –

1

コンストラクターでAssociatedメンバーを初期化しないでください。必要なときに初期化するだけであれば、スタックのオーバーフローがなくなるはずです。

2

Userコンストラクタを再帰的に呼び出しています。あなたがたびにnewUserとなるたびに、new、別のUser、またはむしろad StackOverflowExceptionとなります。

1

問題は、新しいユーザーの無限ループを開発したことです。新しい各ユーザーは、新しいユーザーを関連付ける。

私は、デフォルトのコンストラクタから代入を削除し、パブリックプロパティとして追加します。これを行うと、アソシエートが割り当てられたときを制御できるようになり、エンドレスループが防止されます。

8

User.Associatedは作成時に入力する必要がありますか?あなたがコンストラクタから代入を取り除くならば、それを得るべきではありません。

User()を構築すると、User()が構築され、User()が構築されています。その結果、すべてがダメです。

+1

+1良い回答とカメの類推! –

1

コンストラクタは無限ループにあなたを導き内のコンストラクタを呼び出す:

作成新しいUserインスタンス - >新しいUserインスタンスを作成する - >新しいUserインスタンスを作成する - >新しいUserインスタンスを作成する - >新しいUserインスタンスを作成する - >新しいを作成する

public class User { 
    public User() { 

    } 

    public AddAssociatedUser() { 
     this.Associated = new User(); 
    } 

    public User Associated { get; set; } 
} 

をそして、あなたはそれを必要とするときAddAssociatedUserを呼び出す:インスタンス...

は、あなたはそのような何かを行うことができます。

関連する問題