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 ofhour
. This we call the getter, which returnshour / 3600
. This will call again thehour
and so on and so forth, until the stack will overflow.In your
hour
property getter, you are accessing thehour
property, which creates an infinite loop. Seems like you even have a comment just after the bad code that provides the correct answer.