Function 语句 (Visual Basic)

更新:2007 年 11 月

声明定义 Function 过程的名称、参数和代码。

说明:

Visual Basic 2008 引入了 lambda 表达式,通过这些表达式可以内联定义函数表达式。有关更多信息,请参见函数表达式lambda 表达式

[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] 
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Function ]
    [ statements ]
End Function

部分

  • attributelist
    可选。请参见属性列表

  • accessmodifier
    可选。可以是如下内容之一:

    请参见 Visual Basic 中的访问级别

  • proceduremodifiers
    可选。可以是如下内容之一:

  • Shared
    可选。请参见 Shared

  • Shadows
    可选。请参见 Shadows

  • name
    必需。过程的名称。请参见 已声明元素的名称

  • typeparamlist
    可选。泛型过程的类型参数列表。请参见类型列表

  • parameterlist
    可选。表示此过程的参数的局部变量名称的列表。请参见参数列表

  • returntype
    如果 Option Strict 为 On,则为必选项。此过程返回的值的数据类型。

  • Implements
    可选。指示此过程实现一个或多个 Function 过程,每个过程在一个由此过程的包含类或结构实现的接口中定义。请参见 Implements 语句

  • implementslist
    如果提供了 Implements 则需要。所实现的 Function 过程的列表。

    implementedprocedure [ , implementedprocedure ... ]

    每个 implementedprocedure 均有下列语法和部分:

    interface.definedname

    部分

    说明

    interface

    必需。由此过程的包含类或结构实现的接口的名称。

    definedname

    必需。在 interface 中定义过程时所用的名称。

  • Handles
    可选。指示此过程可以处理一个或多个特定的事件。请参见 Handles

  • eventlist
    如果提供了 Handles 则需要。此过程处理的事件的列表。

    eventspecifier [ , eventspecifier ... ]

    每个 eventspecifier 均有下列语法和部分:

    eventvariable.event

    部分

    说明

    eventvariable

    必需。利用类或结构的数据类型声明的引发事件的对象变量。

    event

    必需。此过程处理的事件的名称。

  • statements
    可选。此过程中要执行的语句块。

  • EndFunction
    终止此过程的定义。

备注

所有可执行代码都必须在过程内。而每个过程在类、结构或模块中声明,后三者称为“包含”类、“包含”结构或“包含”模块。

在需要将值返回给调用代码时,请使用 Function 过程。在不需要返回值时,请使用 Sub 过程。

只能在模块级别定义 Function 过程。这意味着函数的声明上下文必须是类、结构、模块或接口,不能是源文件、命名空间、过程或块。有关更多信息,请参见 声明上下文和默认访问级别

Function 过程默认为公共访问级别。可以使用访问修饰符来调整它们的访问级别。

当希望使用该函数返回的值时,可以在表达式的右边调用 Function 过程。使用 Function 过程的方法与使用任何库函数(如 Sqrt、Cos 或 ChrW)的方法相同。

通过使用函数名(后跟圆括号内的参数列表),可以在表达式中调用 Function 过程。只有在不提供任何参数时,才可以省略括号。但是,如果始终包含括号,则代码的可读性更高。

还可以使用 Call 语句来调用函数,该情况忽略返回值。

规则

  • **返回类型。**Function 语句可以声明它返回的值的数据类型。可以指定任何数据类型或枚举、结构、类或接口的名称。

    如果不指定 returntype,则过程返回 Object。

  • **实现。**如果此过程使用 Implements 关键字,则包含类或结构还必须在其 Class 或 Structure 语句后面紧接 Implements 语句。Implements 语句必须包含在 implementslist 中指定的每个接口。但是,接口在定义 Function 时所用的名称(在 definedname 中)不必与此过程的名称(在 name 中)相同。

行为

  • 从过程中返回。 当 Function 过程返回到调用代码时,将继续执行调用它的语句后的语句。

    使用 Exit Function 和 Return 语句可以立即从 Function 过程中退出。过程中的任何地方可以出现任意数量的 Exit Function 和 Return 语句,而且可以混用 Exit Function 和 Return 语句。

  • **返回值。**要从函数返回某个值,可以将该值赋给函数名,或者将其包含在 Return 语句中。下面的示例将返回值赋给函数名 myFunction,然后使用 Exit Function 语句返回。

    Function myFunction(ByVal j As Integer) As Double
        myFunction = 3.87 * j
        Exit Function
    End Function
    

    如果使用 Exit Function 但未将值赋给 name,则过程会返回在 returntype 中指定的数据类型的默认值。如果未指定 returntype,则过程返回 Nothing,这是 Object 的默认值。

    Return 语句将同时赋予返回值和退出函数。下面的示例显示如何执行此项操作。

    Function myFunction(ByVal j As Integer) As Double
        Return 3.87 * j
    End Function
    

疑难解答

  • **执行的顺序。**Visual Basic 有时会重新排列算术表达式以提高内部效率。由于这个原因,当该函数更改同一表达式中的变量值时,避免在算术表达式中使用 Function 过程。

示例

下面的示例使用 Function 语句声明构成 Function 过程体的名称、参数和代码。ParamArray 修饰符使函数能够接受可变数量的参数。

Public Function calcSum(ByVal ParamArray args() As Double) As Double
    calcSum = 0
    If args.Length <= 0 Then Exit Function
    For i As Integer = 0 To UBound(args, 1)
        calcSum += args(i)
    Next i
End Function

下面的示例调用在前面的示例中声明的函数。

Dim returnedValue As Double = calcSum(4, 3, 2, 1)
' The function's local variables are assigned the following values:
' args(0) = 4, args(1) = 3, and so on.

请参见

任务

如何:使用泛型类

疑难解答过程

概念

参数数组

lambda 表达式

参考

Sub 语句 (Visual Basic)

参数列表

Dim 语句 (Visual Basic)

Call 语句 (Visual Basic)

Of

函数表达式