Function 语句 (Visual Basic)

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

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

必选。 过程名。 请参见已声明的元素名称 (Visual Basic)

typeparamlist

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

parameterlist

可选。 表示此过程的参数的局部变量名称的列表。 请参见参数列表 (Visual Basic)

returntype

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

Implements

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

implementslist

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

implementedprocedure [ , implementedprocedure ... ]

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

interface.definedname

部分说明
interface 必选。此过程的包含类或结构所实现的接口的名称。
definedname 必选。interface 中定义该过程时使用的名称。

Handles

可选。 指示此过程是否可以处理一个或多个特定事件。 请参见 Handles 子句 (Visual Basic)

eventlist

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

eventspecifier [ , eventspecifier ... ]

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

eventvariable.event

部分说明
eventvariable 必选。用引发该事件的类或结构的数据类型声明的对象变量。
event 必选。此过程处理的事件的名称。

statements

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

End Function

终止此过程的定义。

备注

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

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

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

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

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

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

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

提示

可使用 lambda 表达式在行中定义函数表达式。 有关更多信息,请参见函数表达式 (Visual Basic)Lambda 表达式 (Visual Basic)

规则

  • **返回类型。**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

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

Module Module1

    Sub Main()
        ' In the following function call, calcSum's local variables 
        ' are assigned the following values: args(0) = 4, args(1) = 3, 
        ' and so on. The displayed sum is 10.
        Dim returnedValue As Double = calcSum(4, 3, 2, 1)
        Console.WriteLine("Sum: " & returnedValue)
        ' Parameter args accepts zero or more arguments. The sum 
        ' displayed by the following statements is 0.
        returnedValue = calcSum()
        Console.WriteLine("Sum: " & returnedValue)
    End Sub

    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

End Module

请参见

任务

如何:使用泛型类 (Visual Basic)

过程疑难解答 (Visual Basic)

参考

Sub 语句 (Visual Basic)

参数列表 (Visual Basic)

Dim 语句 (Visual Basic)

Call 语句 (Visual Basic)

Of 子句 (Visual Basic)

函数表达式 (Visual Basic)

概念

参数数组 (Visual Basic)

Lambda 表达式 (Visual Basic)