Учебники

VB.Net — Подпроцедуры

Как мы упоминали в предыдущей главе, подпроцедуры — это процедуры, которые не возвращают никакого значения. Мы использовали подпроцедуру Main во всех наших примерах. До сих пор мы писали консольные приложения в этих руководствах. Когда эти приложения запускаются, элемент управления переходит к процедуре Main Sub и, в свою очередь, выполняет любые другие операторы, составляющие тело программы.

Определение подпроцедур

Оператор Sub используется для объявления имени, параметра и тела подпроцедуры. Синтаксис для оператора Sub —

[Modifiers] Sub SubName [(ParameterList)] 
   [Statements]
End Sub

Куда,

  • Модификаторы — укажите уровень доступа к процедуре; Возможные значения: Общедоступный, Частный, Защищенный, Друг, Защищенный друг и информация о перегрузке, переопределении, совместном использовании и теневом копировании.

  • SubName — указывает имя Sub

  • ParameterList — указывает список параметров

Модификаторы — укажите уровень доступа к процедуре; Возможные значения: Общедоступный, Частный, Защищенный, Друг, Защищенный друг и информация о перегрузке, переопределении, совместном использовании и теневом копировании.

SubName — указывает имя Sub

ParameterList — указывает список параметров

пример

В следующем примере демонстрируется подпроцедура CalculatePay, которая принимает два параметра: часы и заработную плату и отображает общую заработную плату сотрудника.

Live Demo

Module mysub
   Sub CalculatePay(ByRef hours As Double, ByRef wage As Decimal)
      'local variable declaration
      Dim pay As Double
      pay = hours * wage
      Console.WriteLine("Total Pay: {0:C}", pay)
   End Sub
   Sub Main()
      'calling the CalculatePay Sub Procedure
      CalculatePay(25, 10)
      CalculatePay(40, 20)
      CalculatePay(30, 27.5)
      Console.ReadLine()
   End Sub
End Module

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Total Pay: $250.00
Total Pay: $800.00
Total Pay: $825.00

Передача параметров по значению

Это механизм по умолчанию для передачи параметров в метод. В этом механизме, когда вызывается метод, для каждого параметра значения создается новое место хранения. Значения фактических параметров копируются в них. Таким образом, изменения, внесенные в параметр внутри метода, не влияют на аргумент.

В VB.Net вы объявляете ссылочные параметры с помощью ключевого слова ByVal . Следующий пример демонстрирует концепцию —

Live Demo

Module paramByval
   Sub swap(ByVal x As Integer, ByVal y As Integer)
      Dim temp As Integer
      temp = x ' save the value of x 
      x = y    ' put y into x 
      y = temp 'put temp into y 
   End Sub
   Sub Main()
      ' local variable definition 
      Dim a As Integer = 100
      Dim b As Integer = 200
      Console.WriteLine("Before swap, value of a : {0}", a)
      Console.WriteLine("Before swap, value of b : {0}", b)
      ' calling a function to swap the values '
      swap(a, b)
      Console.WriteLine("After swap, value of a : {0}", a)
      Console.WriteLine("After swap, value of b : {0}", b)
      Console.ReadLine()
   End Sub
End Module

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —

Before swap, value of a :100
Before swap, value of b :200
After swap, value of a :100
After swap, value of b :200

Это показывает, что значения не меняются, хотя они были изменены внутри функции.

Передача параметров по ссылке

Ссылочный параметр — это ссылка на ячейку памяти переменной. Когда вы передаете параметры по ссылке, в отличие от значений параметров, для этих параметров не создается новое место хранения. Эталонные параметры представляют ту же область памяти, что и фактические параметры, которые передаются в метод.

В VB.Net вы объявляете ссылочные параметры, используя ключевое слово ByRef . Следующий пример демонстрирует это —

Live Demo

Module paramByref
   Sub swap(ByRef x As Integer, ByRef y As Integer)
      Dim temp As Integer
      temp = x ' save the value of x 
      x = y    ' put y into x 
      y = temp 'put temp into y 
   End Sub
   Sub Main()
      ' local variable definition 
      Dim a As Integer = 100
      Dim b As Integer = 200
      Console.WriteLine("Before swap, value of a : {0}", a)
      Console.WriteLine("Before swap, value of b : {0}", b)
      ' calling a function to swap the values '
      swap(a, b)
      Console.WriteLine("After swap, value of a : {0}", a)
      Console.WriteLine("After swap, value of b : {0}", b)
      Console.ReadLine()
   End Sub
End Module

Когда приведенный выше код компилируется и выполняется, он дает следующий результат —