【发布时间】:2021-12-26 20:39:02
【问题描述】:
我正在尝试开发一个简单的基于类的函数,它将修改该函数确定的先前值,即它是递归关系。
本质上,我正在开发自己的随机数生成器,它的工作方式与当前 Random 类的工作方式相同,即
Dim ran as New Random(123456)
For i = 0 To 9
MessageBox.Show(ran.NextDouble & " " & ran.Next(1,11))
Next
我可以使用基于类的方法成功地做到这一点,只需发送一个值 ByRef,但正如您所知,对于方法调用,要修改的旧值需要放在对方法的调用中。因此,我试图克服对方法或全局类型变量的使用,而是希望实例化的类以某种方式记住当前值是什么。
下面的示例代码尝试在每次函数调用期间将值 _value 乘以 2,因此预期结果将是 2、4、8、16 等。但是,即使最初将 2 发送到构造函数,_value 的值始终返回为零。
Class Example
Public _value As Integer
Public Sub New(ByVal _value)
End Sub
Public Function Value() As Integer
_value *= 2
End Function
End Class
Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
Dim x As New Example(2)
For i = 0 To 9
MessageBox.Show(x.Value)
Next
End Sub
【问题讨论】:
-
你有类级变量
_value,它永远不会在构造函数中分配。您在构造函数中还有参数变量_value,应将其更改为value。然后,在构造函数中,添加行_value = value。 -
即使最初将 2 发送给构造函数,_value 的值也始终返回为零。 .... 因为您没有将传递的值设置为构造函数。你应该
Me._value = _value。使用不同的参数名称以避免使用Me。 -
我相信递归通常涉及一个调用自身的方法。我在这里看不到任何递归操作。