类属性上的StackOverFlow

时间:2009-03-25 09:04:51

标签: c#

重复:

  

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,我做错了什么?

5 个答案:

答案 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,则可以使用自动实现的属性...