VB.Net - Sub過(guò)程(子程序)

2022-05-24 16:24 更新

正如我們?cè)谏弦徽轮刑岬降?,Sub過(guò)程是不返回任何值的過(guò)程。 我們?cè)谒械睦又幸恢笔褂肧ub過(guò)程Main。 到目前為止,我們已經(jīng)在這些教程中編寫控制臺(tái)應(yīng)用程序。 當(dāng)這些應(yīng)用程序開始時(shí),控制轉(zhuǎn)到主子程序,它反過(guò)來(lái)運(yùn)行構(gòu)成程序主體的任何其他語(yǔ)句。

定義子過(guò)程

Sub語(yǔ)句用于聲明子過(guò)程的名稱,參數(shù)和主體。 Sub語(yǔ)句的語(yǔ)法是:

[Modifiers] Sub SubName [(ParameterList)] 
    [Statements]
End Sub
  • Modifiers 修飾符 :指定過(guò)程的訪問(wèn)級(jí)別;可能的值有:Public, Private, Protected, Friend, Protected Friend and information regarding overloading, overriding, sharing, and shadowing.

  • SubName 子名 :表示該子的名字

  • ParameterList 參數(shù)列表 :指定參數(shù)的列表

示例

以下示例演示了子過(guò)程CalculatePay,它接受兩個(gè)參數(shù)小時(shí)和工資,并顯示員工的總工資:
   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

當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:

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

按值傳遞參數(shù)

這是將參數(shù)傳遞給方法的默認(rèn)機(jī)制。 在這種機(jī)制中,當(dāng)調(diào)用方法時(shí),為每個(gè)值參數(shù)創(chuàng)建一個(gè)新的存儲(chǔ)位置。 實(shí)際參數(shù)的值被復(fù)制到它們中。 因此,對(duì)方法中的參數(shù)所做的更改對(duì)參數(shù)沒(méi)有影響。

在VB.Net中,可以使用ByVal關(guān)鍵字聲明引用參數(shù)。 下面的例子演示了這個(gè)概念:

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

當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:

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

它表明,雖然它們?cè)诤瘮?shù)內(nèi)部已更改,但值中沒(méi)有變化。

通過(guò)引用傳遞參數(shù)

引用參數(shù)是對(duì)變量的存儲(chǔ)器位置的引用。 當(dāng)您通過(guò)引用傳遞參數(shù)時(shí),與值參數(shù)不同,不會(huì)為這些參數(shù)創(chuàng)建新的存儲(chǔ)位置。 參考參數(shù)表示與提供給該方法的實(shí)際參數(shù)相同的存儲(chǔ)器位置。

在VB.Net中,可以使用ByRef關(guān)鍵字聲明引用參數(shù)。 以下示例演示了這一點(diǎn):

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

當(dāng)上述代碼被編譯和執(zhí)行時(shí),它產(chǎn)生了以下結(jié)果:

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

以上內(nèi)容是否對(duì)您有幫助:
在線筆記
App下載
App下載

掃描二維碼

下載編程獅App

公眾號(hào)
微信公眾號(hào)

編程獅公眾號(hào)