问题
Please explain to me why this code produces a StackOverflowException
.
There is a mistake in one of the lines as I have shown using comment. I do not however understand why this gives me a 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);
}
}
回答1:
This produces a stack-overflow, because there is a recursive call on the hour
, when you try to get it.
Here t.hour
, you try to get the value of hour
. This we call the getter, which returns hour / 3600
. This will call again the hour
and so on and so forth, until the stack will overflow.
回答2:
In your hour
property getter, you are accessing the hour
property, which creates an infinite loop. Seems like you even have a comment just after the bad code that provides the correct answer.
来源:https://stackoverflow.com/questions/29835232/why-do-i-get-a-stackoverflowexception-with-my-property