在C#堆栈溢出中使用访问器
从 公共字符串名称{get{ 返回名称;}集{ 名称=值;}} 那么,为什么我将该值设置为:在C#堆栈溢出中使用访问器,c#,accessor,C#,Accessor,从 公共字符串名称{get{ 返回名称;}集{ 名称=值;}} 那么,为什么我将该值设置为: public int numHighAttacksHit { get { return numHighAttacksHit - handicapHighAttacks; } set { numHighAttacksHit = value; } } this.numHighAttacksHit = 0; 它一次又一次地循环
public int numHighAttacksHit
{
get { return numHighAttacksHit - handicapHighAttacks; }
set { numHighAttacksHit = value; }
}
this.numHighAttacksHit = 0;
它一次又一次地循环,将值设置为numHighAttacksHit,直到我达到堆栈溢出?这是在同一个类中,这有关系吗
屏幕截图:与MSDN中的示例不同,您正在引用导致堆栈溢出的属性定义中的属性 试一试
与MSDN中的示例不同,您正在引用其定义中的属性,从而导致堆栈溢出 试一试
在属性
numHighAttacksHit
本身中返回属性numHighAttacksHit
的值——这会创建一个非终止递归,并且是堆栈溢出的源。在属性中返回属性numHighAttacksHit
的值numHighAttacksHit
本身——这会创建一个非终止递归,是堆栈溢出的根源。C#区分大小写:名称和名称是两个不同的东西,在MSDN文章中,它将名称定义为私有字段:
private string name; // the name field
public string Name // the Name property
{
get
{
return name;
}
}
在您的示例中,您没有该私有字段,因此numHighAttacksHit将在一个循环中访问自身。C#区分大小写:名称和名称是两个不同的东西,在MSDN文章中,它将名称定义为私有字段:
private string name; // the name field
public string Name // the Name property
{
get
{
return name;
}
}
在您的示例中,您没有该私有字段,因此numHighAttacksHit将在一个循环中访问自身。因为在第二个循环中,您一次又一次地设置numHighAttacksHit,而在第一个循环中,您将值设置为name变量,而不是属性。因为在第二个循环中,您一次又一次地设置numHighAttacksHit,在第一次设置中,您将值设置为name variable而不是属性。属性需要引用一个字段,如下所示:
private int numHighAttacksHit;
public int NumHighAttacksHit // <-- note the pascal case
{
get { return numHighAttacksHit - handicapHighAttacks; }
set { numHighAttacksHit = value; }
}
this.NumHighAttacksHit = 0;
private int numHighAttacksHit;
public int NumHighAttacksHit/属性需要引用一个字段,如下所示:
private int numHighAttacksHit;
public int NumHighAttacksHit // <-- note the pascal case
{
get { return numHighAttacksHit - handicapHighAttacks; }
set { numHighAttacksHit = value; }
}
this.NumHighAttacksHit = 0;
private int numHighAttacksHit;
公共int NumHighAttacksHit//