超载get​​ter和setter原因计算器在C# [英] Overloading Getter and Setter Causes StackOverflow in C#

查看:198
本文介绍了超载get​​ter和setter原因计算器在C#的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我不知道是什么原因造成的StackOverflowException当我尝试覆盖get和set功能。当我只使用默认get和set它的工作原理。

I am not sure what is causing the StackOverflowException when I try to overwrite a get and set function. When I just use the default get and set it works.

enum MyEnumType
{
....
}

public MyEnumType data { get; set; }

但是,当我尝试添加更多的数据时,它抛出一个StackOverflowException

But when I try to add additional data, it throws a StackOverflowException

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

任何想法?当我做到这一点的ASP.NET的用户控件的属性是没有问题的。我很奇怪,为什么它是造成StackOverflowException一个正常的枚举数据类型。

Any ideas? When I do this for asp .net user control attributes there is no problem. I am wondering why it is causing a StackOverflowException for a normal enum data type.

推荐答案

是的,你没有一个支持字段...这是你应该怎么做:

Yes, you do not have a backing field... this is how you should do it:

 private MyEnumType data;

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

会发生什么事是你指的是属性返回自身,这将导致试图访问其自身的价值无限循环。因此,计算器。

What happens is that you are referring to the property to return itself, this causes an infinite loop of trying to access its own value. Hence, StackOverFlow.

在你的情况下,当你不添加任何额外的逻辑在get和set方法,你可以使用自动属性也是如此。这是简单的定义如下:

In your case when you do not add any additional logic in the get and set methods you could use an automatic property as well. This is simply defined like so:

public MyEnumType Data 
{
  get;
  set;
}

这篇关于超载get​​ter和setter原因计算器在C#的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆