突变器使程序无限期运行
本文关键字:无限期 运行 程序 突变 | 更新日期: 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;
将再次调用二传手(一次又一次)——我想它最终会得到堆栈溢出并死亡......