VB.Net子程序(Sub)
在前面的章節中提到:子程序是不返回任何值的程序。到目前爲止,在前面所有的例子中一直使用子過程Main
。 在這些教程中,我們一直在編寫控制檯應用程序。當這些應用程序啓動時,控制權轉移到Main Sub過程,然後運行構成程序主體的任何其他語句。
定義子程序
Sub
語句用於聲明子過程的名稱,參數和過程主體。 Sub
語句的語法是:
[Modifiers] Sub SubName [(ParameterList)]
[Statements]
End Sub
其中,
- Modifiers:指定過程的訪問級別; 可能的值有:
Public
,Private
,Protected
,Friend
,Protected Friend
以及有關重載,覆蓋,共享和投影的信息。 - SubName : 表示
Sub
的名稱 - ParameterList : 指定參數的列表
示例
下面的示例演示了一個Sub
過程:CalculatePay,它帶有兩個參數:hours
和 wages
,並計算顯示一個員工的總工資。
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, 100)
CalculatePay(40, 200)
CalculatePay(30, 275)
Console.ReadLine()
End Sub
End Module
當上面的代碼被編譯並執行時,會產生以下結果:
F:\worksp\vb.net\sub>vbc mysub.vb
Microsoft (R) Visual Basic Compiler version 14.0.1038
for Visual Basic 2012
Copyright (c) Microsoft Corporation. All rights reserved.
......
F:\worksp\vb.net\sub>mysub.exe
Total Pay: ¥2,500.00
Total Pay: ¥8,000.00
Total Pay: ¥8,250.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
執行上面示例代碼,得到以下結果 -
F:\worksp\vb.net\sub>vbc paramByval.vb
Microsoft (R) Visual Basic Compiler version 14.0.1038
for Visual Basic 2012
Copyright (c) Microsoft Corporation. All rights reserved.
......
F:\worksp\vb.net\sub>paramByval.exe
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
執行上面示例代碼,得到以下結果 -
F:\worksp\vb.net\sub>vbc paramByref.vb
Microsoft (R) Visual Basic Compiler version 14.0.1038
for Visual Basic 2012
Copyright (c) Microsoft Corporation. All rights reserved.
......
F:\worksp\vb.net\sub>paramByref.exe
Before swap, value of a : 100
Before swap, value of b : 200
After swap, value of a : 200
After swap, value of b : 100