为什么我在这里得到StackOverflowException?

时间:2017-05-15 14:31:54

标签: c# .net oop

我的课就像

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

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

当我运行

时,我在StackOverflowException上获得了get
    [TestMethod]
    public void SizeCheck()
    {
        Assert.AreEqual(Duplication.Size, Duplication.Bits.Length);
    }

有人可以解释为什么会这样吗?看起来像一个奇怪的例外,因为我无法想到任何正在炸毁调用堆栈的事情。

1 个答案:

答案 0 :(得分:14)

因为您在此处调用了Bits方法中的getter方法或get

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());