突变器使程序无限期运行

本文关键字:无限期 运行 程序 突变 | 更新日期: 2023-09-27 18:31:51

using System;
class mainProgram
{
    static void Main()
    {
        Champions Mundo = new Champions("Mundo", 8000, 0);
        Console.WriteLine(Mundo);   
        //using mutator makes my program run forever at this point
        Mundo.Health = 10000;
        Console.WriteLine(Mundo.Health);
    }
}

class Champions
{
    private string name;
    private int health;
    private int mana;
    public Champions(string name, int health, int mana)
    {
        this.name = name;
        this.health = health;
        this.mana = mana;
    }
    public Champions()
    {
    }
    public int Health
    {
        get
        {
           return this.health;
        }
        set
        {
            this.Health = value;
        }
    }
    public override string ToString()
    {
        return string.Format("Champion: {0} Health: {1} Mana: {2}",
                            this.name, this.health, this.mana); 
    }

 }

大家好,

每当我在 Main 中使用突变器方法时,我的程序都会无限期运行。 导致此问题的原因是什么?是因为我在实例化对象时已经设置了健康值吗?提前感谢!

突变器使程序无限期运行

您正在 setter 内部调用 setter 方法。您应该为此StackOverFlowException,尝试设置支持字段而不是属性本身:

public int Health
{
    get
    {
        return this.health;
    }
    set
    {
        this.health = value;
    }
}

您的Health属性以递归方式设置自身,因此它将无限期地重复,直到StackOverflowException。 您需要设置this.health而不是this.Health

在这种情况下,还应使用自动实现的属性,以避免使用样板代码。所以而不是

private int health;
public int Health
{
    get { return health; }
    set { health = value; }
}

您可以改用

public int Health { get; set; }

这将自动为您定义一个隐藏的私有支持字段。

除非我弄错了,否则在二传手中调用this.Health = value;将再次调用二传手(一次又一次)——我想它最终会得到堆栈溢出并死亡......