我用C#编写了这个:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
namespace Object
{
class Program
{
int hp;
Program mob1 = new Program();
Program player = new Program();
static void Main(string[] args)
{
Program go = new Program();
go.next();
}
public void next()
{
mob1.hp = 50;
player.hp = 100;
Console.WriteLine("Player's HP: " + player.hp);
Console.ReadKey();
}
}
}
当我运行这个程序时,我得到一个Stack Overflow异常,程序就崩溃了。 异常发生在第一个对象mon的声明中。
这是为什么?我该如何解决它?
答案 0 :(得分:13)
你正在产生无限递归。
以这种方式思考:
启动应用程序时,您将创建类型为Program
的实例。该实例将创建另外两个实例:mob1
和player
。这两个实例将分别创建两个,依此类推。最终,程序崩溃了。
你应该创建一个特定的类来保存玩家的状态及其hp
- 例如public class Player{}
。
修改强>
class Program
{
Player mob1 = new Player(); // mob1 and player are now of type Player
Player player = new Player();
static void Main(string[] args)
{
Next();
}
static public void Next()
{
mob1.Hp = 50;
player.Hp = 100;
Console.WriteLine("Player's HP: " + player.Hp);
Console.ReadKey();
}
}
public class Player
{
public int Hp {get; set;}
}
答案 1 :(得分:6)
它崩溃了,因为你刚刚创建了一个无限循环 - 递归,但没有任何结束的方法。您的类的每个实例都会创建新对象,最终导致程序崩溃。
答案 2 :(得分:1)
您拥有类型计划的2个字段的课程计划 其中每个都有2个类型为Program
的字段您创建了一个无限的变量循环。
答案 3 :(得分:0)
您的字段声明
Program mob1 = new Program();
等。每次创建Program
的实例时都会创建Program
的实例...
这导致重复创建Program对象,直到堆栈上没有更多内存为止。