This question already has answers here:
Overloading getter and setter causes a stack overflow in C# [duplicate]

(4个答案)


1年前关闭。



class Program
{
    static void Main(string[] args)
    {
        something s = new something();
        s.DoIt(10);
        Console.Write(s.testCount);
    }
}

class something
{
    public int testCount
    {
        get { return testCount; }
        set { testCount = value + 13; }
    }

    public void DoIt(int val)
    {
        testCount = val;
    }
}

这就是我所拥有的,因为我想测试并尝试C#的getters/setter方法。但是,我在“set {testCount = value + 13}”处未处理StackOverFlowException。而且我无法逐步解决,因为我从Visual Studio中收到“调试器无法继续运行该进程。进程已终止”消息。有什么想法我做错了吗?

编辑:今天,我了解到我做了一个非常愚蠢的derp。考虑到众多即时响应。现在我知道了。

最佳答案

在引用属性中的属性时,您具有无限递归。

您应该为此使用备用字段:

private int testCount;
public int TestCount
{
    get { return testCount; }
    set { testCount = value + 13; }
}

请注意,与字段名称TestCount(小写的testCount)相反,属性名称t(也符合C#命名标准)。

关于c# - getter/setter C#中的无限循环,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/16694098/

10-13 08:27