VB.Net Tutorial/Collections/Array Parameters

Материал из VB Эксперт
Перейти к: навигация, поиск

Pass array

<source lang="vbnet">Imports System Imports Microsoft.VisualBasic Module Test

 Dim i As Integer
 Public Sub AddOne(ByVal InputArray() As Integer)
   For i = 0 To 3
     InputArray(i) = InputArray(i) + 1
   Next
 End Sub
 Public Sub AddTwo(ByVal InputArray() As Integer)
   Dim tempArray() As Integer
   tempArray = InputArray.Clone
   For i = 0 To 3
     tempArray(i) = tempArray(i) + 2
   Next
 End Sub
 
   Sub Main()
       Dim intArray() As Integer = {6, 8, 7, 6}
       For i = 0 To 3
           Console.WriteLine("{0}", intArray(i))
       Next
       AddOne(intArray)
       For i = 0 To 3
           Console.WriteLine("{0}", intArray(i))
       Next
       AddTwo(intArray)
       For i = 0 To 3
           Console.WriteLine("{0}", intArray(i))
       Next
   End Sub

End Module</source>

6
8
7
6
7
9
8
7
7
9
8
7

Passing arrays and individual array elements to procedures

<source lang="vbnet">Module Tester

  Sub Main()
     Dim array1 As Integer() = New Integer() {1, 2, 3, 4, 5}
     Dim i As Integer
     " display original elements of array1
     For i = 0 To array1.GetUpperBound(0)
        Console.WriteLine(array1(i))
     Next
     ModifyArray(array1) " array is passed by reference
     Console.WriteLine("The values of the modified array are:")
     " display modified elements of array1
     For i = 0 To array1.GetUpperBound(0)
        Console.WriteLine(array1(i))
     Next
     " array element passed by value
     ModifyElementByVal(array1(3))
     Console.WriteLine("array1(3) after " & _
        "ModifyElementByVal: " & array1(3))
     " array element passed by reference
     ModifyElementByRef(array1(3))
     Console.WriteLine("array1(3) after " & _
        "ModifyElementByRef: " & array1(3))
  End Sub " Main
  " procedure modifies array it receives (note ByVal)
  Sub ModifyArray(ByVal arrayParameter As Integer())
     Dim j As Integer
     For j = 0 To arrayParameter.GetUpperBound(0)
        arrayParameter(j) *= 2
     Next
  End Sub " ModifyArray
  " procedure modifies integer passed to it
  " original is not be modified (note ByVal)
  Sub ModifyElementByVal(ByVal element As Integer)
     Console.WriteLine("Value received in " & _
        "ModifyElementByVal: " & element)
     element *= 2
     Console.WriteLine("Value calculated in " & _
        "ModifyElementByVal: " & element)
  End Sub " ModifyElementByVal
  " procedure modifies integer passed to it
  " original is be modified (note ByRef)
  Sub ModifyElementByRef(ByRef element As Integer)
     Console.WriteLine("Value received in " & _
        "ModifyElementByRef: " & element )
     element *= 2
     Console.WriteLine("Value calculated in " & _
        "ModifyElementByRef: " & element)
  End Sub 

End Module</source>

1
2
3
4
5
The values of the modified array are:
2
4
6
8
10
Value received in ModifyElementByVal: 8
Value calculated in ModifyElementByVal: 16
array1(3) after ModifyElementByVal: 8
Value received in ModifyElementByRef: 8
Value calculated in ModifyElementByRef: 16
array1(3) after ModifyElementByRef: 16

Testing the effects of passing array references using ByVal and ByRef

<source lang="vbnet">Module Tester

  Sub Main()
     Dim i As Integer
     Dim firstArray As Integer()
     Dim firstArrayCopy As Integer()
     firstArray = New Integer() {1, 2, 3}
     firstArrayCopy = firstArray
     For i = 0 To firstArray.GetUpperBound(0)
        Console.Write(firstArray(i) & " ")
     Next
     FirstDouble(firstArray)
     For i = 0 To firstArray.GetUpperBound(0)
        Console.Write(firstArray(i) & " ")
     Next
     If firstArray Is firstArrayCopy Then
        Console.WriteLine("The references are equal.")
     Else
        Console.WriteLine("The references are not equal.")
     End If
     Dim secondArray As Integer()
     Dim secondArrayCopy As Integer()
     secondArray = New Integer() {1, 2, 3}
     secondArrayCopy = secondArray
     For i = 0 To secondArray.GetUpperBound(0)
        Console.Write(secondArray(i) & " ")
     Next
     SecondDouble(secondArray)
     For i = 0 To secondArray.GetUpperBound(0)
        Console.Write(secondArray(i) & " ")
     Next
     If secondArray Is secondArrayCopy Then
        Console.WriteLine("The references are equal.")
     Else
        Console.WriteLine("The references are not equal.")
     End If
  End Sub " Main
  Sub FirstDouble(ByVal array As Integer())
     Dim i As Integer
     For i = 0 To array.GetUpperBound(0)
        array(i) *= 2
     Next
     array = New Integer() {11, 12, 13}
  End Sub 
  Sub SecondDouble(ByRef array As Integer())
     Dim i As Integer
     For i = 0 To array.GetUpperBound(0)
        array(i) *= 2
     Next
     array = New Integer() {11, 12, 13}
  End Sub 

End Module</source>

1 2 3 2 4 6 The references are equal.
1 2 3 11 12 13 The references are not equal.