VB.Net/Language Basics/ByRef

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

Array passed By Reference

Imports System
Public Class MainClass
    Shared Sub Main(ByVal args As String())
      Dim i As Integer
      " declare array references
      Dim secondArray As Integer()
      Dim secondArrayCopy As Integer()
      " allocate secondArray and copy its reference
      secondArray = New Integer() {1, 2, 3}
      secondArrayCopy = secondArray
      Console.WriteLine(vbCrLf & "Test passing array " & _
         "reference using ByRef.")
      Console.Write("Contents of secondArray before " & _
         "calling SecondDouble: ")
      " print contents of secondArray before procedure call
      For i = 0 To secondArray.GetUpperBound(0)
         Console.Write(secondArray(i) & " ")
      Next
      " pass secondArray using ByRef
      SecondDouble(secondArray)
      Console.Write(vbCrLf & "Contents of secondArray " & _
         "after calling SecondDouble: ")
      " print contents of secondArray after procedure call
      For i = 0 To secondArray.GetUpperBound(0)
         Console.Write(secondArray(i) & " ")
      Next
      " test whether the reference was changed by SecondDouble
      If secondArray Is secondArrayCopy Then
         Console.WriteLine(vbCrLf & "The references are " & _
            "equal.")
      Else
         Console.WriteLine(vbCrLf & "The references are " & _
            "not equal.")
      End If

    End Sub
   " procedure modifies elements of array and assigns
   " new reference (note ByRef)
   Shared Sub SecondDouble(ByRef array As Integer())
      Dim i As Integer
      " double contents of array
      For i = 0 To array.GetUpperBound(0)
         array(i) *= 2
      Next
      " create new reference, assign it to array
      array = New Integer() {11, 12, 13}
   End Sub " SecondDouble
End Class


Modify Array Element By Reference

Imports System
Public Class MainClass
    Shared Sub Main(ByVal args As String())
      Dim array1 As Integer() = New Integer() {1, 2, 3, 4, 5}
      Dim i As Integer
      Console.WriteLine( "The values of the original array are:" & vbCrLf )
      " display original elements of array1
      For i = 0 To array1.GetUpperBound(0)
         Console.WriteLine(  "  " & array1(i) )
      Next
      " array element passed by reference
      ModifyElementByRef(array1(3))
      Console.WriteLine(  vbCrLf & "array1(3) after " & _
         "ModifyElementByRef: " & array1(3) )
    End Sub
   Shared Sub ModifyElementByRef(ByRef element As Integer)
      Console.WriteLine(  vbCrLf & "Value received in " & _
         "ModifyElementByRef: " & element )
      element *= 2
      Console.WriteLine(  vbCrLf & "Value calculated in " & _
         "ModifyElementByRef: " & element )
   End Sub " ModifyElementByRef

End Class


Pass parameter By value or By Reference

Imports System
Imports System.Diagnostics
Public Class MainClass
    Shared Sub DoubleItByVal(ByVal X As Single)
        X *= 2
    End Sub
    Shared Sub DoubleItByRef(ByRef X As Single)
        X *= 2
    End Sub
    Shared Sub Main()
        Dim value As Single
        value = 10
        DoubleItByVal(value)
        Console.WriteLine(value)
        value = 10
        DoubleItByRef(value)
        Console.WriteLine(value)
    End Sub
End Class