函数中的递归值

Recursive value in a function

我正在尝试开发一个简单的基于class的函数,它将修改函数确定的先前值,即它是递归关系。

本质上,我正在开发自己的随机数生成器,其工作方式与当前随机 class 的工作方式相同,即

Dim ran as New Random(123456)
For i = 0 To 9
   MessageBox.Show(ran.NextDouble & "  " & ran.Next(1,11))
Next

我可以使用基于 class 的方法成功完成此操作,只需发送一个值 ByRef,但如您所知,对于方法调用,需要将要修改的旧值放在对方法。因此,我试图克服方法或全局类型变量的使用,而是希望实例化的 class 以某种方式记住当前值是什么。

下面的示例代码尝试在每次函数调用期间将值 _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

通常字段是 Private。如果您想公开 class 中的数据,您可以使用 Public Property.

更改 Sub New 的参数名称。如果适当地限定您的名字将起作用,但它会令人困惑。您必须对传入的值执行某些操作!将其分配给您的字段 _value.

您的函数没有 return 值。它只是更改 _value 的值。如果你没有 return 任何东西,请使用 Sub。将 Function 的名称更改为有意义的名称。添加 Return 语句以将值发送回调用代码。

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.DoubleValue.ToString)
    Next
End Sub

Class Example
    Private _value As Integer
    Public Sub New(ByVal Input As Integer)
        _value = Input
    End Sub
    Public Function DoubleValue() As Integer
        _value *= 2
        Return _value
    End Function
End Class