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);
}
}
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.
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