我有以下代码:
$(document).ready(function(){
$('select').on('change', function() {
var test = $( '#result' ).val() + '\n' + this.value;
$('#result').val(test) ;
});
});
但是我得到了一个堆栈溢出异常。
我知道这是因为我没有做正确的设置并且正在进入一个无限循环,但我不明白为什么会发生这种情况?
答案 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;}
其他一些观察结果:
属性名称的标准惯例是以大写字母开头,这就是为什么我在我的示例中将您的属性更改为Time
和Price
。
如果您进行任何浮点数学运算,您可能需要考虑将decimal
用于Price
这样的属性,因为double
在表示十进制数字时有一些轻微的不精确性1.1。 decimal
会毫不费力地存储数字。
只是在catch
块中写入控制台似乎不正确。您基本上忽略了错误(来自逻辑流程意义)。我不是接受类中的字符串并解析它们,而是在调用代码中进行验证,并确保输入在将它们传递给类之前是有效的。
答案 2 :(得分:2)
属性getter和setter实际上只是getXXX
和setXXX
方法(这就是它们的编译方式)。因为您从属性本身设置属性,所以如果您在方法上无休止地重复出现。
public DateTime time()
{
return time();
}
如其他答案所述,您可以使用支持字段或自动实现的属性。