VB.Net – 子程序
正如我们在前一章中提到的,Sub过程是不返回任何值的过程.我们在所有示例中都使用了Sub过程Main.到目前为止,我们一直在编写控制台应用程序.当这些应用程序启动时,控制进入Main Sub程序,然后运行构成程序主体的任何其他语句.
定义子程序
Sub 语句用于声明子过程的名称,参数和主体. Sub语句的语法是 :
[Modifiers] Sub SubName [(ParameterList)] [Statements] End Sub
其中,
-
修饰符 : 指定程序的访问级别;可能的值包括 - 公共,私人,受保护,朋友,受保护的朋友以及有关重载,覆盖,共享和阴影的信息.
-
子名称 : 表示Sub的名称
-
ParameterList : 指定参数列表
示例
以下示例演示Sub过程 CalculatePay 采用两个参数小时和工资并显示员工的总工资 :
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
当编译上述代码时nd执行,它产生以下结果 :
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