C# 类属性上的堆栈溢出 重复:

C# 类属性上的堆栈溢出 重复:,c#,C#,我有一个简单的类调用myClass,该类的属性名为isAuthenticated,代码如下: public class myClass { public myClass() { this.isAuthenticated = false; } public bool isAuthenticated { get { return isAuthenticated; }

我有一个简单的类调用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; }
        }
}

蛇吃它的尾巴。当您在构造函数中将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; }
}