如何使用函数返回

时间:2015-08-24 17:52:28

标签: vb.net function

我想知道这是否是正确的方法。 我有这个代表用户操作的示例代码,以及在函数中完成的计算,这个函数应该将值返回给我的子?

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim i As Integer = 1
    Test_function(i)
    MsgBox(i)
End Sub

Private Function Test_function(ByVal i As Integer)
    i = i + 1
    Return (i)
End Function

当我运行这段代码时,我得到了:

i = 1 in sub

i = 2 in function

i = 1 in sub?

你怎么把i = 2变成我的子?或者这不是使用它的正确方法吗?

2 个答案:

答案 0 :(得分:4)

我认为您所问的是为什么i不会因调用Test_function而改变。

让我们分解您的代码。

Private Sub Button1_Click(sender As Object, e As EventArgs) Handles Button1.Click
    Dim i As Integer = 1 'creating a variable named i, value 1.
    Test_function(i) 'passing the value of the variable i to test function, but not doing anything with what the function returns.
    MsgBox(i) 'calling messagebox with the value i.
End Sub

Private Function Test_function(ByVal i As Integer) 'creating a new variable also named i with the value being passed in.
    i = i + 1 'incrementing the value of the i variable by 1.
    Return (i) 'returning i 
End Function

因此,就我所知,有一些概念你误解了 - ByVal意味着什么,也许是变量范围的概念,以及Return的作用。

显而易见的答案是,您未使用Test_function返回的值。如果您有i = test_Function(i),则调用i

会增加Test_function

另一种方法是传递i ByRef而不是ByVal-如果你这样做,i方法范围内的Test_function将与{{1}相同在i方法的范围内。但是因为你传递它Button1_ClickByVal变量实际上是两个完全不同的变量。

答案 1 :(得分:1)

没有什么可以怀疑的,这只是一个简单的误解。如果您这样打电话,则打印:set database, ENV['DATABASE_URL']的实际值:

i

然后两者都是一样的; 或者您可以通过以下方式检查:

MsgBox(Test_function(i))

这是因为你传递Dim tempVal = Test_function(i)'<-- will give 2 MsgBox(i)'<--- will give 1 的值而不是i作为参考,如果你把它作为参考传递,那么两者都是相同的。 因此,如果您更改功能签名如下:

i

相同的函数调用将为您提供Private Function Test_function(ByRef i As Integer) i = i + 1 Return (i) End Function

这两个值
2

Reference ByVal and ByRef