C# - 对象声明和用法

时间:2013-11-04 13:52:45

标签: c# object

我用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 个答案:

答案 0 :(得分: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;}
}

答案 1 :(得分:6)

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

答案 2 :(得分:1)

您拥有类型计划的2个字段的课程计划 其中每个都有2个类型为Program

的字段

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

答案 3 :(得分:0)

您的字段声明

Program mob1 = new Program();

等。每次创建Program的实例时都会创建Program的实例...

这导致重复创建Program对象,直到堆栈上没有更多内存为止。