2016-09-23 3 views
-1

私はC#でシングルトンでオブジェクトをインスタンス化しようとしています。Cでシングルトンをインスタンス化する#

public IdleState() 
    { 
     mario = Mario.Instance; 
     Console.WriteLine(mario); 
    } 

何が起こっているようだが、私のシングルトンで_INSTANCE変数は常にnull残っているので、それは新しいインスタンスを返し続ける:

private static Mario __instance; 
    public static Mario Instance 
    { 
     get 
     { 
      if (__instance == null) 
      { 
       __instance = new Mario(); //TODO correct this vector 
      } 
      return __instance; 
     } 
    } 

    public Mario() 
    { 
     position = Vector2.Zero; 
     theatre = XNATheatre.Theatre; 
     ActionState = new IdleState(); 
     PreviousState = ActionState; 
     ActionState.Enter(null); 
     isFacingRight = true; 
    } 

また、私はマリオのコンストラクタでインスタンス化されているアイドル状態のクラスを持っています私がそれをしたいのとまったく逆の、マリオの。私はこれを回避する方法が正確にはわかりません。

+0

"私のシングルトンの_instance変数は常にnullのままなので、新しいインスタンスのmarioを返すことができます。" trueの場合、Instanceプロパティはnullを返し、マリオ。私は一歩前進して、いつも「マリオ」の新しいインスタンスが毎回作成されていると思う理由を理解する必要があると思います。 'Instance'プロパティは(スレッドセーフではありませんが)シングルトンを作成します。 – vcsjones

+1

投稿したコードがあれば、最終的に 'StackOverflowException'を取得し、' Mario.Instance'プロパティが返されることはありません。しかし、あなたの問題の記述にはこれは言及されておらず、もし例外を得たならば、スタックトレースを見て回帰呼び出しを見て、何が間違っていたのかを見ることができます。だから、あなたは実際にどんな問題を抱えていますか?良い[mcve]とより明確で明確な問題の説明を入力してください。 –

答えて

4

循環依存性があります。 Marioをインスタンス化すると、Mario.Instanceを呼び出すIdleStateをインスタンス化し、新しいMarioをインスタンス化して繰り返します。

関連する問題