Why do I get a StackOverflowException with my property?

会有一股神秘感。 提交于 2019-11-28 13:04:53

问题


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

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!