来自http://msdn.microsoft.com/en-us/library/aa287786(v=vs.71).aspx
public string Name {get { 返回名称; } set { name = value; }}
那么为什么当我将值设置为:
public int numHighAttacksHit
{
get { return numHighAttacksHit - handicapHighAttacks; }
set { numHighAttacksHit = value; }
}
this.numHighAttacksHit = 0;
它一直盘旋,再次设置值到numHighAttacksHit,直到我达到堆栈溢出?这属于同一类,重要吗?
答案 0 :(得分:4)
该属性需要引用字段,如下所示:
private int numHighAttacksHit;
public int NumHighAttacksHit // <-- note the pascal case
{
get { return numHighAttacksHit - handicapHighAttacks; }
set { numHighAttacksHit = value; }
}
this.NumHighAttacksHit = 0;
答案 1 :(得分:3)
您正在引用其定义中的属性导致堆栈溢出,这与MSDN中的示例不同。
试
private int numHighAttacksHit;
public int NumHighAttacksHit
{
get { return numHighAttacksHit - handicapHighAttacks; }
set { numHighAttacksHit = value; }
}
答案 2 :(得分:3)
C#区分大小写:名称和名称是两个不同的东西,在MSDN文章中,它的名称定义为私有字段:
private string name; // the name field
public string Name // the Name property
{
get
{
return name;
}
}
在您的示例中,您没有该私有字段,因此numHighAttacksHit将进入循环访问自身。
答案 3 :(得分:1)
您将在属性numHighAttacksHit
内返回属性numHighAttacksHit
的值 - 这会创建一个非终止递归,并且是堆栈溢出的来源。
答案 4 :(得分:1)
因为在第二个中,您一次又一次地设置numHighAttacksHit,而在第一个中,您将值设置为name变量而不是属性。