VB.Net - 子程式



正如我們在上一章中提到的,子程式是不返回值的程式。在我們所有的示例中,我們一直在使用子程式 Main。到目前為止,在這些教程中,我們一直在編寫控制檯應用程式。當這些應用程式啟動時,控制權將轉到 Main 子程式,然後依次執行構成程式主體的任何其他語句。

定義子程式

Sub 語句用於宣告子程式的名稱、引數和主體。Sub 語句的語法如下:

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

其中:

  • 修飾符 − 指定程式的訪問級別;可能的值包括 - Public、Private、Protected、Friend、Protected Friend 以及有關過載、重寫、共享和隱藏的資訊。

  • 子程式名 − 指示 Sub 的名稱

  • 引數列表 − 指定引數列表

示例

以下示例演示了一個子程式 CalculatePay,它接受兩個引數 hourswages,並顯示員工的總工資:

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關鍵字宣告引用引數。以下示例演示了此概念:

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關鍵字宣告引用引數。以下示例演示了這一點:

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

編譯並執行上述程式碼後,將產生以下結果:

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