Vb.net 为什么我的公共变量的行为不符合预期?
TxtRadius10中的值在应为5时一直返回0(TxtDiameter10框中的文本为10并已锁定)。我知道diameter正在初始化,因为如果我设置TxtRadius10.Text=diameter/2,它将返回5。这并不是您认为它在做的事情:Vb.net 为什么我的公共变量的行为不符合预期?,vb.net,Vb.net,TxtRadius10中的值在应为5时一直返回0(TxtDiameter10框中的文本为10并已锁定)。我知道diameter正在初始化,因为如果我设置TxtRadius10.Text=diameter/2,它将返回5。这并不是您认为它在做的事情: Public Class Form1 Public diameter As Integer Public radius As Decimal = diameter / 2 Private Sub TxtRadius10_TextCha
Public Class Form1
Public diameter As Integer
Public radius As Decimal = diameter / 2
Private Sub TxtRadius10_TextChanged(sender As Object, e As EventArgs) Handles TxtRadius10.TextChanged, TxtDiameter10.TextChanged
diameter = TxtDiameter10.Text
TxtRadius10.Text = radius
End Sub
End Class
radius
变量不包含对diameter
变量的引用,以便将来进行计算。此赋值语句使用当前值计算一次,并将结果放置在半径中。直径的当前值为:
Public radius As Decimal = diameter / 2
嗯,这是未分配的。所以它默认为0
。而0/2
是0
。因此,radius
被初始化为0
,并且在代码中不再分配它。所以它总是0
如果要在每次访问时动态计算该值,请将其设置为属性:
Public diameter As Integer
现在,对radius
的任何引用都将在每次访问时运行Get
逻辑,并在运行中重新计算值。您得到了一个意外循环
在TxtRadius10_TextChanged事件中更改TxtRadius10.Text的值时,它会再次触发该事件。由于直径从0开始(整数的默认值),因此半径值从0开始(0/2)
您还应该知道,在更新直径时,半径不会更新。您刚刚为它设置了一个初始值。当直径改变时,必须重新计算半径 您正在声明半径=直径/2
但是,当遇到此语句时,未定义直径
在定义半径之前先定义直径帮个忙,在代码顶部放置选项Strict On
,或者在项目的属性中设置它。
Public Property radius As Decimal
Get
Return diameter / 2
End Get
End Property