0

我用 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 的声明中。

为什么是这样?我该如何解决?

4

4 回答 4

13

您正在生成无限递归。

这样想:当您启动应用程序时,您正在创建一个 类型的实例Program。该实例将创建另外两个实例:mob1player. 这两个实例将再创建两个,依此类推。最终,程序崩溃了。

您应该创建一个特定的类来保存玩家的状态及其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;}
}
于 2013-11-04T13:55:54.407 回答
6

它崩溃了,因为您刚刚创建了一个无限循环 - 递归,但没有任何结束方式。您的类的每个实例都会创建新对象和新对象,最终导致程序崩溃。

于 2013-11-04T13:55:08.867 回答
1

你有一个类程序有 2 个类型程序的字段,每个字段都有 2 个程序类型的字段

您创建了一个无限循环的变量。

于 2013-11-04T13:58:06.627 回答
0

您的字段声明

Program mob1 = new Program();

Program每次创建实例时创建一个实例Program...

这导致程序对象的重复创建,直到堆栈上没有更多内存。

于 2013-11-04T13:57:24.930 回答