2017-05-15 16 views
-4

ことがあるかもしれない理由を誰かが説明できますか?私のクラスはここでStackOverflowExceptionが発生するのはなぜですか?

public static class Duplication 
{ 
    public const int Size = 1024; 

    public static byte[] Bits 
    { get 
     { 
      if(Bits == null) 
       SetBits(); 
      return Bits; 
     } 
     private set 
     { 
      Bits = value; 
     } 
    } 
. 
. 
. 

のようなもので、私は

[TestMethod] 
    public void SizeCheck() 
    { 
     Assert.AreEqual(Duplication.Size, Duplication.Bits.Length); 
    } 

を実行したときに、私はget TERにStackOverflowExceptionを取得していますか私はコールスタックを吹き飛ばしているものは考えられないので、奇妙な例外のように見えます。

+5

あなたの財産全体が間違っています。裏地が必要です。直ちに問題になるのは、 'Bits'のゲッターが' Bits'のゲッターを呼び出すのですが、セッターにも同じ問題があります。バッキングフィールドを導入し、それをプロパティ内で使用します。 –

答えて

14

あなたはここでget方法の内側にゲッターメソッドまたはBitsを呼び出しているので:

if(Bits == null) 

あなたはあなたの財産を使用するためにフィールドを明示的に宣言する必要があります。また

private static byte[] _bits; 

public static byte[] Bits 
{ get 
    { 
     if(_bits == null) 
      SetBits(); 
     return _bits; 
    } 
    private set 
    { 
     _bits = value; 
    } 
} 

サイドノートはifステートメントを短縮することができます:

return _bits ?? (_bits = SetBits()); 
関連する問題