C# 类属性上的堆栈溢出 重复:
我有一个简单的类调用myClass,该类的属性名为isAuthenticated,代码如下:C# 类属性上的堆栈溢出 重复:,c#,C#,我有一个简单的类调用myClass,该类的属性名为isAuthenticated,代码如下: public class myClass { public myClass() { this.isAuthenticated = false; } public bool isAuthenticated { get { return isAuthenticated; }
public class myClass
{
public myClass()
{
this.isAuthenticated = false;
}
public bool isAuthenticated
{
get { return isAuthenticated; }
set { isAuthenticated = value; }
}
}
当我初始化类时,我在set{…}行上得到一个stackoverflow,我做错了什么?getter/setter正在调用自己。添加一个成员变量
{
bool isAuthenticated;
public myClass()
{
IsAuthenticated = false;
}
public bool IsAuthenticated
{
get { return isAuthenticated; }
set { isAuthenticated = value; }
}
}
蛇吃它的尾巴。当您在构造函数中将true赋值给isAuthenticated时,您使用属性的setter,但在setter中,您再次设置了它,因此您有某种无限的设置循环。setter正在调用自己,而它应该设置一些私有字段-从外观上看,getter也会这样做,因为您的示例不包含任何字段。如果您使用的是.net 3.5,则只需使用自动实现的属性…,因为您正在设置myClass.IsAuthenticated属性本身 必须将值保存在局部变量中,或者如果使用C#3.0或更高版本,则只需执行(自动属性) 作为“属性调用自身”备注的补充,在最新的C#版本中,您可以将这些给定的简单属性转换为自动属性:
编辑:更改了属性的大小写,C#命名约定要求将大写字母作为公共字段或属性的起始字母。您指的是成员变量,而不是局部变量。是的!我以前也这样做过。有点像嚼口香糖时咬舌头的编程。编辑是为了澄清C#3.0,而不是.NET(任何特定的)副本。我真希望人们在投票结束时发表评论……我自己也犯过很多次这样的错误。KROSENVALDS的答案是正确的。也可能需要查看:命名约定。要避免这个错误,请考虑自动实现的属性:public Boo-IsAuthDebug {GET;set;}。
public bool IsAuthenticated {get; set;}
public class myClass
{
public myClass()
{
this.IsAuthenticated = false;
}
public bool IsAuthenticated { get; set; }
}