私有子可以将新创建​​的变量传递给main()吗?

时间:2017-01-07 04:13:39

标签: string vb.net module parameter-passing main

私有子程序在从main接收值后是否与main相同,创建新变量并将其传递给main?

这是我想要做的,但我遇到了一些困难。 例如,在下面的testSUB中,我更改了字符串。我可以将extraSTRING和newSTRING传递给main吗?任何例子都会有所帮助。

Module module1
    Sub main()
        Dim l As String
        Dim I As Long = 1
        Dim A As String
        testsub(l, A, I)
    End Sub

    Private Sub testSub(l As String, A As String, I As Long)
        Dim extraSTRING As String = "extraTEXT"
        Dim newSTRING As String = l & extraSTRING
    End Sub
End Module

1 个答案:

答案 0 :(得分:3)

要返回值,您可以将Sub转换为Function

Private Function testFunction (ByVal arg1 As String) As String

    Return arg1 & " and some more text"

End Function

要调用上面的Function并分配返回的值,请使用以下代码:

Dim a As String = testFunction("some text")

'Output:
'a = "some text and some more text"

下面是输出代码的截图:

enter image description here

或者,您可以使用ByRef

  

指定以这样的方式传递参数:被调用的过程可以更改调用代码中参数的变量值。

ByRefByVal略有不同:

  

指定以这样的方式传递参数:被调用的过程或属性不能更改调用代码中参数的变量值。

以下是一些示例代码,向您展示了行动的差异:

Module Module1

    Sub Main()
        Dim a As Integer = 0
        Dim b As Integer = 0
        Dim c As Integer = 0

        testSub(a, b, c)

        'Output:
        'a = 0
        'b = 0
        'c = 3

    End Sub

    Private Sub testSub(arg1 As Integer, ByVal arg2 As Integer, ByRef arg3 As Integer)
        arg1 = 1
        arg2 = 2
        arg3 = 3
    End Sub

End Module

如果未在modifier中指定VB.NET(如上面的arg1所示),默认情况下编译器将使用ByVal

  

此处请注意,虽然VB.NET默认情况下使用ByVal但未指定VBA,但ByRef不会,而默认使用Sub main() Dim l As String Dim A As String Dim I As Long = 1 testSub(l, A, I) End Sub 。如果您将代码从一个代码移植到另一个代码,请注意这一点。

下面是输出代码的截图:

enter image description here

以您的代码为例:

l

要传递变量AIByRef并更改其值,您可以更改方法以使用修饰符Private Sub testSub(ByRef l As String, ByRef A As String, ByRef I As Long) l = "TEXT" A = "extra" & l I = 100 End Sub

  <div id="mapWrapper" style="height:500px; width:500px;">
    <div id="map" style="height:100%"></div>
  </div>  <!-- end of the mapWrapper  --> 
    <script>
      function initMap() {
        map = new google.maps.Map(document.getElementById('map'), {
          center: {lat: -34.397, lng: 150.644},
          zoom: 8
        });
      }

    </script>

下面是输出代码的截图:

enter image description here