VB.Net Tutorial/Class Module/Pass by Reference

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

Demonstrates passing by reference.

Module Tester
   Sub Main()
      Dim number1 As Integer = 2
      Console.WriteLine("Before calling SquareByValue, " & "number1 is {0}", number1)
      SquareByValue(number1)  " passes number1 by value
      Console.WriteLine("After returning from SquareByValue, " & "number1 is {0}" & vbCrLf, number1)
      Dim number2 As Integer = 2
      Console.WriteLine("Before calling SquareByReference, " & "number2 is {0}", number2)
      SquareByReference(number2) " passes number2 by reference
      Console.WriteLine("After returning from " & _
         "SquareByReference, number2 is {0}" & vbCrLf, number2)
      Dim number3 As Integer = 2
      Console.WriteLine("Before calling SquareByReference " & "using parentheses, number3 is {0}",number3)
      SquareByReference((number3)) " passes number3 by value
      Console.WriteLine("After returning from " & "SquareByReference, number3 is {0}", number3)
   End Sub
   Sub SquareByValue(ByVal number As Integer)
      Console.WriteLine("After entering SquareByValue, " & "number is {0}", number)
      number *= number
      Console.WriteLine("Before exiting SquareByValue, " & "number is {0}", number)
   End Sub
   Sub SquareByReference(ByRef number As Integer)
      Console.WriteLine("After entering SquareByReference" & ", number is {0}", number)
      number *= number
      Console.WriteLine("Before exiting SquareByReference" & ", number is {0}", number)
   End Sub 
End Module
Before calling SquareByValue, number1 is 2
After entering SquareByValue, number is 2
Before exiting SquareByValue, number is 4
After returning from SquareByValue, number1 is 2
Before calling SquareByReference, number2 is 2
After entering SquareByReference, number is 2
Before exiting SquareByReference, number is 4
After returning from SquareByReference, number2 is 4
Before calling SquareByReference using parentheses, number3 is 2
After entering SquareByReference, number is 2
Before exiting SquareByReference, number is 4
After returning from SquareByReference, number3 is 2

Pass class by reference

Option Strict On
Public Class YourClass
   Private yourName As String
   Private yourNumber As Decimal
   Public Sub New(breed As String)
      yourName = breed
   End Sub
   Public ReadOnly Property Name() As String
      Get
         Return yourName
      End Get
   End Property
   Public Property Number() As Decimal
      Get
         Return yourNumber
      End Get
      Set
         yourNumber = CDec(value)
      End Set
   End Property
   Public Sub ShowInfo()
      Console.WriteLine("This " & yourName & " weighs " & yourNumber & " pounds.")
   End Sub
End Class
Public Class Tester
   Public Shared Sub Main()
      Dim mal As New YourClass("A")
      mal.Number = 130
      ChangeYourClassInfo(mal)
      mal.ShowInfo
      CompletelyChangeYourClassInfo(mal)
      mal.ShowInfo
   End Sub
   Public Shared Sub ChangeYourClassInfo(ByVal aYourClass As YourClass)
      aYourClass.Number = 125
   End Sub
   Public Shared Sub CompletelyChangeYourClassInfo(ByVal aYourClass As YourClass)
      Dim newf As New YourClass("Newfoundland")
      aYourClass = newf
   End Sub
End Class
This A weighs 125 pounds.
This A weighs 125 pounds.

Pass Decimal by reference

Option Strict On
Public Module Tester
   Public Sub Main()
      Dim salary As Decimal = 400.00d
      Dim reviewPts As Integer = 12
      ReceiveRaise(salary, reviewPts)
      Console.WriteLine(salary)
   End Sub
   Function ReceiveRaise(ByRef salary As Decimal, ByVal reviewPts As Integer) _
                         As Boolean
         Dim increasePct As Decimal
         increasePct = ((reviewPts - 10) * .005d)
         salary = salary * (1 + increasePct)
         Return True
   End Function
End Module
404.000

Pass value by reference

Option Strict On
 Imports System
 Module Module1
    Sub Main( )
       Dim theVariable As Integer = 5
       Console.WriteLine("In Run. theVariable: {0}",theVariable)
       Doubler(theVariable)
       Console.WriteLine("Back in Run. theVariable: {0}",theVariable)
    End Sub
    Public Sub Doubler(ByVal param As Integer)
       Console.WriteLine("In Method1. Received param: {0}",param)
       param *= 2
       Console.WriteLine("Updated param. Returning new value: {0}", _
       param)
    End Sub

 End Module
In Run. theVariable: 5
In Method1. Received param: 5
Updated param. Returning new value: 10
Back in Run. theVariable: 5