Why do I get a StackOverflowException with my prop

2020-02-16 05:49发布

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

2条回答
可以哭但决不认输i
2楼-- · 2020-02-16 06:22

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.

查看更多
Melony?
3楼-- · 2020-02-16 06:27

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.

查看更多
登录 后发表回答