5

当我尝试覆盖 get 和 set 函数时,我不确定是什么导致了 StackOverflowException。当我只使用默认的获取和设置时,它可以工作。

enum MyEnumType
{
....
}

public MyEnumType data { get; set; }

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

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

有任何想法吗?当我为 ASP.NET 用户控件属性执行此操作时,没有任何问题。为什么它会导致普通枚举数据类型的 StackOverflowException?

4

4 回答 4

30

是的,您没有支持字段...您应该这样做:

private MyEnumType data;

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

发生的情况是您指的是要返回自身的属性,这会导致尝试访问其自身值的无限循环。因此,堆栈溢出。

在您的情况下,当您没有在 get 和 set 方法中添加任何其他逻辑时,您也可以使用自动属性。简单定义如下:

public MyEnumType Data
{
  get;
  set;
}
于 2009-09-17T09:57:15.290 回答
8

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

private MyEnumType _data;

public MyEnumType Data
{
  get { return _data; }
  set { _data = value; }
}
于 2009-09-17T09:56:42.933 回答
3
public class MyClass
{
    string propertyString;

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

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

于 2009-09-17T09:59:06.627 回答
1

在 setter / getter 中放置一个断点并进行调试,确保使用step into ( F11),而不是 step over - 这应该有助于解释发生了什么。

于 2009-09-17T10:38:39.057 回答