为什么我的属性会出现StackOverflowException?

时间:2015-04-23 22:09:22

标签: c# stack-overflow

请向我解释为什么此代码会生成StackOverflowException

我使用评论显示其中一行中有错误。但是,我不明白为什么这会给我一个StackOverflowException

class TimePeriod
{
    private double seconds;

    public double hour
    {
        get { return hour / 3600; }  // should be :  get { return seconds / 3600; }
        set { seconds = value * 3600; }
    }
}

class Program
{        
    static void Main()
    {
        TimePeriod t = new TimePeriod();
        t.hour = 5;
        System.Console.WriteLine("Time in hours: " + t.hour);
    }
} 

2 个答案:

答案 0 :(得分:13)

这会产生堆栈溢出,因为当您尝试获取它时,hour上会有一个递归调用。

此处t.hour,您尝试获取hour的值。我们称之为getter,返回hour / 3600。这将再次调用hour,依此类推,直到堆栈溢出。

答案 1 :(得分:12)

hour属性获取器中,您正在访问hour属性,这会创建一个无限循环。好像你甚至在提供正确答案的错误代码之后发表评论。