Sub 语句 (Visual Basic)
更新:2007 年 11 月
声明定义 Sub 过程的名称、参数和代码。
[ <attributelist> ] [ Partial ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ]
Sub name [ (Of typeparamlist) ] [ (parameterlist) ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Sub ]
[ statements ]
End Sub
部分
attributelist
可选。请参见属性列表。Partial
可选。指示分部方法的定义。请参见分部方法。accessmodifier
可选。可以是如下内容之一:请参见 Visual Basic 中的访问级别。
proceduremodifiers
可选。可以是如下内容之一:MustOverride Overrides
NotOverridable Overrides
Shared
可选。请参见 Shared。Shadows
可选。请参见 Shadows。name
必需。过程名。请参见 已声明元素的名称。typeparamlist
可选。泛型过程的类型参数的列表。请参见类型列表。parameterlist
可选。表示此过程的参数的局部变量名称的列表。请参见 参数列表。Implements
可选。指示此过程实现一个或多个 Sub 过程,每个过程都在此过程的包含类或结构所实现的接口中定义。请参见 Implements 语句。implementslist
如果提供了 Implements 则需要。正在实现的 Sub 过程列表。implementedprocedure [ , implementedprocedure ... ]
每个 implementedprocedure 均有下列语法和部分:
interface.definedname
部分
说明
interface
必需。此过程的包含类或结构所实现的接口的名称。
definedname
必需。interface 中定义该过程时使用的名称。
Handles
可选。指示此过程是否可以处理一个或多个特定事件。请参见 Handles。eventlist
如果提供了 Handles 则需要。此过程处理的事件的列表。eventspecifier [ , eventspecifier ... ]
每个 eventspecifier 均有下列语法和部分:
eventvariable.event
部分
说明
eventvariable
必需。用引发该事件的类或结构的数据类型声明的对象变量。
event
必需。此过程处理的事件的名称。
statements
可选。要在此过程内运行的语句块。EndSub
结束此过程的定义。
备注
所有可执行代码都必须在过程内。在不需要将值返回到调用代码的情况下可使用 Sub 过程。在需要返回值时可使用 Function 过程。
仅可以在模块级别使用 Sub。这意味着 Sub 过程的声明上下文必须是类、结构、模块或接口,并且不能是源文件、命名空间、过程或块。有关更多信息,请参见 声明上下文和默认访问级别。
Sub 过程默认为公共访问。可以使用访问修饰符来调整它们的访问级别。
规则
- **实现。**如果此过程使用 Implements 关键字,则包含类或结构必须具有 Implements 语句,该语句紧跟在其 Class 或 Structure 语句之后。Implements 语句必须包含在 implementslist 中指定的每个接口。不过,接口定义 Sub 时使用的名称(在 definedname 中)不必与此过程的名称(在 name 中)相同。
行为
**从过程中返回。**当 Sub 过程返回到调用代码时,继续执行调用它的语句后的语句。
使用 Exit Sub 和 Return 语句可导致立即从 Sub 过程中退出。任何数目的 Exit Sub 和 Return 语句都可能在过程中的任何地方出现,并且可以混合使用 Exit Sub 和 Return 语句。
下面的示例显示从 Sub 过程返回的结果。
Sub mySub(ByVal q As String) Return End Sub
**调用过程。**与 Function 过程一样,Sub 过程是采用参数和执行一系列语句的单独过程。然而,与返回值的 Function 过程不同,Sub 过程不能在表达式中使用。
通过使用语句中的过程名(后跟圆括号中的参数列表)调用 Sub 过程。只有在不提供任何参数时,才可以省略括号。不过,如果您始终使用圆括号,则代码的可读性会更好。
也可以使用 Call 语句调用 Sub 过程。这能够提高代码的可读性。
疑难解答
**执行的顺序。**Visual Basic 有时会重新排列算术表达式以提高内部效率。因此,如果您的参数列表包括调用其他过程的表达式,您将无法依赖要按任何特定顺序调用的这些表达式。
示例
下面的示例使用 Sub 语句定义组成 Sub 过程体的名称、参数和代码。
Sub computeArea(ByVal length As Double, ByVal width As Double)
' Declare local variable.
Dim area As Double
If length = 0 Or width = 0 Then
' If either argument = 0 then exit Sub immediately.
Exit Sub
End If
' Calculate area of rectangle.
area = length * width
' Print area to Immediate window.
Debug.WriteLine(area)
End Sub