StackOverflow来自get和set的异常

时间:2015-10-06 18:51:36

标签: c# get set

我有以下代码:

$(document).ready(function(){
      $('select').on('change', function() {
         var test = $( '#result' ).val() + '\n' + this.value;          
         $('#result').val(test) ;
    });
}); 

但是我得到了一个堆栈溢出异常。

我知道这是因为我没有做正确的设置并且正在进入一个无限循环,但我不明白为什么会发生这种情况?

3 个答案:

答案 0 :(得分:9)

public DateTime time
{
    get { return this.time; }
    set
    {
        this.time = value;                
    }
}

您没有使用支持字段,而是在属性设置器中设置属性本身。

您可以使用1)自动属性

来解决此问题
public DateTime Time { get; set; }

或2)支持领域

private DateTime _time;
public Datetime Time 
{
    get { return _time; }
    set { _time = value; }
} 

它们都等同于相同的代码。

要获得解释,请在代码中获得time

get { return this.time; } 

它必须检索要返回的time的值。它通过调用get上的time来实现这一点,time必须检索Public Function isPerfect(myInput As Integer) As Boolean endCounter = myInput \ 2 sum = 1 For perfectCounter As Integer = 2 To endCounter If myInput Mod perfectCounter = 0 Then sum += perfectCounter If sum = myInput Then Return True End If End If Next Return False End Function Private Sub btnPerfect_Click(sender As Object, e As EventArgs) Handles btnPerfect.Click input = Convert.ToInt32(txtNumber.Text) msg = "The perfect numbers between 1 and " & input & " are : " For inputCounter As Integer = 0 To input If isPerfect(inputCounter) = True Then msg += inputCounter & " " End If Next MsgBox(msg, , "Perfect Number") txtNumber.Focus() txtNumber.Text = Nothing End Sub 的值,等等。

答案 1 :(得分:3)

  

我不明白为什么会发生这种情况?

    public double price
    {
        get { return this.price; }
        set
        {
            this.price = value;                
        }
    }

当你"得到" price,调用price的getter,调用price的getter,调用price的getter,其中......

如果您不想使用支持字段,请使用自动执行属性:

    public DateTime Time {get; set;}
    public double Price {get; set;}

其他一些观察结果:

  1. 属性名称的标准惯例是以大写字母开头,这就是为什么我在我的示例中将您的属性更改为TimePrice

  2. 如果您进行任何浮点数学运算,您可能需要考虑将decimal用于Price这样的属性,因为double在表示十进制数字时有一些轻微的不精确性1.1。 decimal会毫不费力地存储数字。

  3. 只是在catch块中写入控制台似乎不正确。您基本上忽略了错误(来自逻辑流程意义)。我不是接受类中的字符串并解析它们,而是在调用代码中进行验证,并确保输入在将它们传递给类之前是有效的。

答案 2 :(得分:2)

属性getter和setter实际上只是getXXXsetXXX方法(这就是它们的编译方式)。因为您从属性本身设置属性,所以如果您在方法上无休止地重复出现。

public DateTime time()
{
    return time();
}

如其他答案所述,您可以使用支持字段或自动实现的属性。