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

Nap*_*Nap 5 .net c# asp.net stack-overflow properties

当我尝试覆盖get和set函数时,我不确定导致StackOverflowException的原因.当我只使用默认的get并设置它有效.

enum MyEnumType
{
....
}

public MyEnumType data { get; set; }
Run Code Online (Sandbox Code Playgroud)

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

public MyEnumType data 
{
  get
  {
    return data;
  }
  set 
  {
    data = value;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

Rob*_*ban 28

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

 private MyEnumType data;

public MyEnumType Data 
{
  get
  {
    return data;
  }
  set 
  {
    data = value;
  }
}
Run Code Online (Sandbox Code Playgroud)

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

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

public MyEnumType Data 
{
  get;
  set;
}
Run Code Online (Sandbox Code Playgroud)

  • 对于那些不知道的人来说,C#在引擎盖下实现了两个独立的**函数**.因此,每次调用setter或getter都会引入另一个堆栈层,最终导致堆栈溢出. (7认同)

Hen*_*man 6

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

private MyEnumType _data;

public MyEnumType Data 
{
  get { return _data; }
  set { _data = value; }
}
Run Code Online (Sandbox Code Playgroud)