New to C#, why does Property Set throw StackOverflow exception?
我有一个简单的类调用myClass,它有一个名为isAuthenticated的属性,代码如下:
public class myClass
{
public myClass()
{
this.isAuthenticated = false;
}
public bool isAuthenticated
{
get { return isAuthenticated; }
set { isAuthenticated = value; }
}
}
当我开始上课时,我会在set {...}行上获得stackoverflow,我做错了什么?
答案 0 :(得分:13)
getter / setter正在调用自己。添加成员变量。
{
bool isAuthenticated;
public myClass()
{
IsAuthenticated = false;
}
public bool IsAuthenticated
{
get { return isAuthenticated; }
set { isAuthenticated = value; }
}
}
答案 1 :(得分:6)
因为您正在设置myClass.IsAuthenticated属性。
您必须将值保存在本地变量中,或者如果您使用C#3.0或更高版本,只需执行(自动属性)
public bool IsAuthenticated {get; set;}
答案 2 :(得分:1)
作为“Property-calls-yourself”备注的补充,在最新的C#版本中,您可以将这些给定的简单属性转换为自动属性:
public class myClass
{
public myClass()
{
this.IsAuthenticated = false;
}
public bool IsAuthenticated { get; set; }
}
编辑:更改了属性的大小写,C#命名约定将大写字母称为公共字段或属性的起始字母。
答案 3 :(得分:0)
蛇吃它的尾巴。当你在构造函数中为isAuthenticated赋值true时,你使用你的属性的setter,但是在setter中你再次设置它,所以你有一些无限的设置循环。
答案 4 :(得分:0)
setter正在调用自己,当它应该设置一些私有字段时 - 通过它的外观,getter将执行相同的操作,因为你的示例不包含任何字段。如果您使用的是.net 3.5,则可以使用自动实现的属性...