重载Getter和Setter导致C#中的StackOverflow

时间:2009-09-17 09:53:21

标签: c# .net asp.net properties stack-overflow

当我尝试覆盖get和set函数时,我不确定导致StackOverflowException的原因。当我只使用默认的get并设置它时可以工作。

enum MyEnumType
{
....
}

public MyEnumType data { get; set; }

但是当我尝试添加其他数据时,它会抛出StackOverflowException

public MyEnumType data 
{
  get
  {
    return data;
  }
  set 
  {
    data = value;
  }
}

有什么想法吗?当我为asp .net用户控件属性执行此操作时,没有问题。我想知道为什么它导致正常枚举数据类型的StackOverflowException。

4 个答案:

答案 0 :(得分:28)

是的,你没有支持领域......你应该这样做:

 private MyEnumType data;

public MyEnumType Data 
{
  get
  {
    return data;
  }
  set 
  {
    data = value;
  }
}

发生的事情是你指的是要返回的属性,这会导致无限循环尝试访问自己的值。因此,StackOverFlow。

如果你没有在get和set方法中添加任何额外的逻辑,你也可以使用自动属性。这简单地定义如下:

public MyEnumType Data 
{
  get;
  set;
}

答案 1 :(得分:6)

您正在getter和setter中引用属性本身,这会导致无限递归(堆栈溢出)。如果您使用了标准命名约定(数据),那将更加明显 尝试类似:

private MyEnumType _data;

public MyEnumType Data 
{
  get { return _data; }
  set { _data = value; }
}

答案 2 :(得分:3)

public class MyClass
{
    string propertyString;

    public string MyPropertyString
    {
        get
        {
            return propertyString;
        }
        set
        {
            propertyString = value;
        }
    }
}

属性名称必须与成员名称不同。

答案 3 :(得分:0)

在setter / getter中放置一个断点并调试,确保你使用step into(F11)而不是跳过 - 这应该有助于解释最新进展。