VB.Net 子程序



  • 子程序

    如上一章所述,子过程是不返回任何值的过程。在所有示例中,我们一直在使用Sub过程Main。到目前为止,在这些教程中我们一直在编写控制台应用程序。当这些应用程序启动时,控件进入Main Sub过程,并依次运行构成程序主体的任何其他语句。
  • 定义子程序

    该子语句用来声明名称,参数和子过程的主体。Sub语句的语法是-
    
    [Modifiers] Sub SubName [(ParameterList)] 
       [Statements]
    End Sub
    
    
    说明
    • Modifiers - 指定子程序的访问级别;可能的值包括:“Public”,“Private”,“Protected”,“Friend”,“Protected Friend”以及有关重载,覆盖,共享和映射的信息。
    • SubName-表示Sub的名称
    • ParameterList-指定参数列表
    示例
    以下示例演示了一个子过程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
    
    
    尝试一下
    编译并执行上述代码后,将产生以下结果-
    
    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 substion 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 substion 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
    
    
    尝试一下