请向我解释为什么此代码会生成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);
}
}
答案 0 :(得分:13)
这会产生堆栈溢出,因为当您尝试获取它时,hour
上会有一个递归调用。
此处t.hour
,您尝试获取hour
的值。我们称之为getter,返回hour / 3600
。这将再次调用hour
,依此类推,直到堆栈溢出。
答案 1 :(得分:12)
在hour
属性获取器中,您正在访问hour
属性,这会创建一个无限循环。好像你甚至在提供正确答案的错误代码之后发表评论。