📜  VB.Net-子过程

📅  最后修改于: 2020-11-19 08:54:33             🧑  作者: Mango


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

定义子程序

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

[Modifiers] Sub SubName [(ParameterList)] 
   [Statements]
End Sub

哪里,

  • 修饰符-指定过程的访问级别;可能的值是-公共,私有,受保护,朋友,受保护的朋友以及有关过载,覆盖,共享和阴影的信息。

  • 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 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