namespace ConsoleApplication1
{
class class1
{
protected internal string inf1()
{
Console.WriteLine("\n......inf1() \n");
return inf1();
}
}
class class2 :class1
{
static void Main(string[] args)
{
class1 c1 = new class1();
class2 c2 = new class2();
Console.WriteLine(c1.inf1());
Console.WriteLine(c2.inf1());
Console.ReadKey();
}
}
获得无限循环问题。由于StackOverflowException
?
如何防止代码无限循环?
答案 0 :(得分:0)
在class2
,您正在呼叫Console.WriteLine(c1.inf1());
。
所以class1.inf1
应该在您尝试将其输出到控制台时返回一个字符串。
但是,class1.inf1()
递归调用自身而没有退出,并且不返回字符串。
所以我认为这可能是你想要完成的事情:
protected internal string inf1()
{
return "\n......inf1() \n";
}
答案 1 :(得分:0)
问题在于:
protected internal string inf1()
{
Console.WriteLine("\n......inf1() \n");
return inf1();
}
此方法每次都会向自己返回一个调用,这意味着它将被无限调用。问题在于,程序在进入方法之前会向堆栈添加它所在的内存上的当前位置,这样当一个方法返回时它可以返回到该位置并从那里继续,但该堆栈不是无限的所以使用有问题的方法它会变满,然后程序崩溃,因为没有堆栈就无法继续运行。