Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
menu search
person
Welcome To Ask or Share your Answers For Others

Categories

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);
    }
} 
See Question&Answers more detail:os

与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
284 views
Welcome To Ask or Share your Answers For Others

1 Answer

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.


与恶龙缠斗过久,自身亦成为恶龙;凝视深渊过久,深渊将回以凝视…
thumb_up_alt 0 like thumb_down_alt 0 dislike
Welcome to ShenZhenJia Knowledge Sharing Community for programmer and developer-Open, Learning and Share
...