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 |
選擇項。 可以是下列其中一項: |
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 |
結束這個程序的定義。 |
備註
所有可執行程式碼必須位在程序內。 會依序在類別、結構或模組內宣告每個程序,即稱為「包含」(Containing) 類別、結構或模組。
需要將值傳回給呼叫程式碼時,請使用 Function 程序。 不需要傳回值時,請使用 Sub 程序。
您只能在模組層級定義 Function 程序。 這表示函式的「宣告內容」(Declaration Context) 必須是類別、結構、模組或介面,並且不可以是原始程式檔 (Source File)、命名空間 (Namespace)、程序或區塊。 如需詳細資訊,請參閱宣告內容和預設存取層級 (Visual Basic)。
Function 程序預設為公用存取。 您可以使用存取修飾詞調整存取層級。
當您要使用函式傳回的值時,可以在運算式的右邊呼叫 Function 程序。 使用 Function 程序就像使用任何程式庫函式一樣 (例如 Sqrt、Cos 或 ChrW)。
在運算式中,可以使用程序名稱 (後接括在括號中的引數清單) 來呼叫 Function 程序。 只有在沒有提供任何引數的情況下,才可以省略括號。 然而,如果您一律使用括號括起來,則程式碼會較容易閱讀。
也可以使用 Call 陳述式來呼叫函式,在這種情況下會忽略傳回值。
注意事項 |
---|
您可以使用「Lambda 運算式」(Lambda Expression),在程式行中定義函式運算式。 如需詳細資訊,請參閱 函式運算式 (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 修飾詞可以讓函式接受 (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) 先前範例中所宣告的函式。
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