Visual Basic 子程序

在前面的章节中提到:子程序是不返回任何值的。到目前为止,在前面所有的例子中一直使用子程序 Main。 在这些教程中,我们一直在编写控制台应用程序。当这些应用程序启动时,从 Main Sub 开始,然后运行程序主体中的其他语句。


定义子程序

Sub 语句用于声明子程序的名称,参数和程序主体。 Sub 语句的语法是:

其中,

  • Modifiers - 指定子程序的访问级别; 可能的值有:Public, Private, Protected, Friend, Protected Friend 以及有关重载,重写,共享的信息。
  • SubName - 表示子程序的名称。
  • ParameterList - 指定参数的列表。

实例

下面的实例演示了一个 Sub 程序:CalculatePay,它带有两个参数:hourswages ,并计算显示一个员工的总工资:

  1. Module mysub
  2. Sub CalculatePay(ByRef hours As Double, ByRef wage As Decimal)
  3. 'local variable declaration
  4. Dim pay As Double
  5. pay = hours * wage
  6. Console.WriteLine("Total Pay: {0:C}", pay)
  7. End Sub
  8. Sub Main()
  9. 'calling the CalculatePay Sub Procedure
  10. CalculatePay(25, 10)
  11. CalculatePay(40, 20)
  12. CalculatePay(30, 27.5)
  13. Console.ReadLine()
  14. End Sub
  15. End Module

结果如下:

  1. Total Pay: 2,500.00
  2. Total Pay: 8,000.00
  3. Total Pay: 8,250.00

按值传递参数

这是将参数传递给方法的默认机制。在这种机制中,当一个方法被调用时,会为每个值参数创建一个新的存储位置。实际参数的值被复制到其中。 所以,对方法中的参数所做的更改对参数没有影响。

在 VB 中,使用 ByVal 关键字声明引用参数。下面是一个按值传递参数的实例:

  1. Module paramByval
  2. Sub swap(ByVal x As Integer, ByVal y As Integer)
  3. Dim temp As Integer
  4. temp = x ' save the value of x
  5. x = y ' put y into x
  6. y = temp 'put temp into y
  7. End Sub
  8. Sub Main()
  9. ' local variable definition
  10. Dim a As Integer = 100
  11. Dim b As Integer = 200
  12. Console.WriteLine("Before swap, value of a : {0}", a)
  13. Console.WriteLine("Before swap, value of b : {0}", b)
  14. ' calling a function to swap the values '
  15. swap(a, b)
  16. Console.WriteLine("After swap, value of a : {0}", a)
  17. Console.WriteLine("After swap, value of b : {0}", b)
  18. Console.ReadLine()
  19. End Sub
  20. End Module

结果如下:

  1. Before swap, value of a : 100
  2. Before swap, value of b : 200
  3. After swap, value of a : 100
  4. After swap, value of b : 200
注意: 虽然在函数内部进行了更改,但参数的值没有变化。

按引用传递参数

引用参数是对变量的内存位置的引用。当通过引用传递参数时,与值参数不同,不会为这些参数创建新的存储位置。引用参数表示与提供给方法的实际参数相同的存储位置。

在 VB 中,使用 ByRef 关键字声明引用参数。下面是一个按值传递参数的实例:

  1. Module paramByref
  2. Sub swap(ByRef x As Integer, ByRef y As Integer)
  3. Dim temp As Integer
  4. temp = x ' save the value of x
  5. x = y ' put y into x
  6. y = temp 'put temp into y
  7. End Sub
  8. Sub Main()
  9. ' local variable definition
  10. Dim a As Integer = 100
  11. Dim b As Integer = 200
  12. Console.WriteLine("Before swap, value of a : {0}", a)
  13. Console.WriteLine("Before swap, value of b : {0}", b)
  14. ' calling a function to swap the values '
  15. swap(a, b)
  16. Console.WriteLine("After swap, value of a : {0}", a)
  17. Console.WriteLine("After swap, value of b : {0}", b)
  18. Console.ReadLine()
  19. End Sub
  20. End Module

结果如下:

  1. Before swap, value of a : 100
  2. Before swap, value of b : 200
  3. After swap, value of a : 200
  4. After swap, value of b : 100