类属性上的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,你可以使用自动实现的属性……