Function过程的声明语法
声明 Function 过程的语法如下所示:
[ modifiers ] Function functionname [( parameterlist )] As returntype
' Statements of the Function procedure.
End Function
modifiers 可以指定与重载、重写、共享和隐藏相关的访问级别和信息。有关更多信息,请参见 Function 语句 (Visual Basic)。
声明每个参数的方法与声明 Sub 过程的方法相同。
数据类型
每个 Function 过程都具有数据类型,就和每个变量都具有数据类型一样。此数据类型由 Function 语句中的 As 子句指定,它确定函数返回给调用代码的值的数据类型。下面的示例声明演示了这一点。
复制代码
Function yesterday() As Date
End Function
Function findSqrt(ByVal radicand As Single) As Single
End Function有关更多信息,请参见 Function 语句 (Visual Basic) 中的“各部分说明”。
返回值
Function 过程发送回调用代码的值称为它的“返回值”。此过程使用以下两种方式之一返回此值:
它在过程的一个或多个语句中给自己的函数名赋值。在执行 Exit Function 或 End Function 语句之前,控制不会返回调用程序。下面的示例演示这一点。
Function functionname [( parameterlist )] As returntype
' The following statement does not transfer control back to the calling code.
functionname = expression
' When control returns to the calling code, expression is the return value.
End Function
它使用 Return 语句指定返回值,并直接将控制返回调用程序。下面的示例演示这一点。
Function functionname [( parameterlist )] As returntype
' The following statement immediately transfers control back to the calling code and returns the value of expression .
Return expression
End Function
将返回值分配给函数名的优点是,直到控制遇到 Exit Function 或 End Function 语句时才从过程返回控制。这样就可以先分配一个初步的值,以后如有必要再进行调整。
有关更多信息,请参见 Function 语句 (Visual Basic) 中的“返回值”。
返回数组
如果 Function 过程返回数组数据类型,则不能在函数内部访问数组的各个元素。如果试图这样做,编译器会将它解释为对过程的递归调用。下面的示例演示这一点。
Function allOnes(ByVal n As Integer) As Integer()
For i As Integer = 1 To n - 1
' The following statement generates a COMPILER ERROR .
allOnes(i) = 1
Next i
' The following statement generates a COMPILER ERROR .
Return allOnes()
End Function
在前面的示例中,编译器将尝试的赋值 allOnes(i) = 1 解释为对赋值语句左边的 allOnes 的调用。它将尝试的 Return allOnes() 解释为没有参数的调用。两个语句都将生成编译器错误。