Function 陳述式 (Visual Basic)

更新:2007 年 11 月

宣告用於定義 Function 程序的名稱、參數和程式碼。

注意事項:

Visual Basic 2008 引進「Lambda 運算式」(Lambda Expression),讓您能在程式行中定義函式運算式。如需詳細資訊,請參閱 函式運算式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 程序。這表示函式的「宣告內容」必須是類別、結構、模組或介面,並且不可以是原始程式檔 (Source File)、命名空間 (Namespace)、程序或區塊。如需詳細資訊,請參閱宣告內容和預設存取層級

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 修飾詞可以讓函式接受 (Accept) 引數的變數數字。

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

下列範例會叫用 (Invoke) 先前範例中所宣告的函式。

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.

請參閱

工作

HOW TO:使用泛型類別

程序疑難排解

概念

參數陣列

Lambda 運算式

參考

Sub 陳述式 (Visual Basic)

參數清單

Dim 陳述式 (Visual Basic)

Call 陳述式 (Visual Basic)

Of

函式運算式