类属性上的StackOverFlow
重复:
C#的新手,为什么Property Set会抛出StackOverflowexception?
我有一个简单的类调用myClass,它有一个名为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; } } }
因为您要设置myClass.IsAuthenticated属性本身。
您必须将值保存在本地变量中,或者如果您使用C#3.0或更高版本,只需执行(自动属性)
public bool IsAuthenticated {get; set;}
作为“Property-calls-yourself”备注的补充,在最新的C#版本中,您可以将这些给定的简单属性转换为自动属性:
public class myClass { public myClass() { this.IsAuthenticated = false; } public bool IsAuthenticated { get; set; } }
编辑:更改属性的大小写,C#命名约定将大写字母称为公共字段或属性的起始字母。
蛇吃它的尾巴。 当你在构造函数中为isAuthenticated赋值true时,你使用你的属性的setter,但是在setter中你再次设置它,所以你有一些无限的设置循环。
setter正在调用自己,当它应该设置一些私有字段时 – 由于它的外观,getter将执行相同的操作,因为你的示例不包含任何字段。 如果你使用.net 3.5,你可以使用自动实现的属性……