Function — Instrukcja (Visual Basic)
Deklaruje nazwę, parametry i kod, który Function procedury.
[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
[ statements ]
[ Exit Function ]
[ statements ]
End Function
Części
Termin |
Definicja |
||||||
attributelist |
Opcjonalne.Zobacz listy atrybutów. |
||||||
accessmodifier |
Opcjonalne.Może być jedną z następujących czynności: Zobacz Poziomy dostępu w Visual Basic. |
||||||
proceduremodifiers |
Opcjonalne.Może być jedną z następujących czynności:
|
||||||
Shared |
Opcjonalne.Zobacz wspólne. |
||||||
Shadows |
Opcjonalne.Zobacz cienie. |
||||||
Async |
Opcjonalne.Zobacz asynchroniczne. |
||||||
Iterator |
Opcjonalne.Zobacz sterująca. |
||||||
name |
Wymagane.Nazwa procedury.Zobacz Zadeklarowane nazwy elementów (Visual Basic). |
||||||
typeparamlist |
Opcjonalne.Lista parametrów typu rodzajowego procedury.Zobacz z listy Typ. |
||||||
parameterlist |
Opcjonalne.Lista nazwy zmiennych lokalnych reprezentujących parametry tej procedury.Zobacz Lista parametrów (Visual Basic). |
||||||
returntype |
Required if Option Strict is On.Typ danych wartości zwracanej przez tę procedurę. |
||||||
Implements |
Opcjonalne.Wskazuje, że procedura ta implementuje jednego lub więcej Function procedury, każdy z nich zdefiniowane w interfejsie implementowane przez klasy lub struktury zawierające tę procedurę.Zobacz Implements — Instrukcja. |
||||||
implementslist |
Wymagany, jeżeli Implements jest dostarczany.Lista Function procedury są wdrażane. implementedprocedure [ , implementedprocedure ... ] Każdy implementedprocedure ma następującą składnię i części: interface.definedname
|
||||||
Handles |
Opcjonalne.Wskazuje, że procedura ta może obsługiwać jeden lub więcej określonych zdarzeń.Zobacz Handles — Klauzula (Visual Basic). |
||||||
eventlist |
Wymagany, jeżeli Handles jest dostarczany.Lista zdarzeń, który obsługuje tę procedurę. eventspecifier [ , eventspecifier ... ] Każdy eventspecifier ma następującą składnię i części: eventvariable.event
|
||||||
statements |
Opcjonalne.Blok instrukcji do wykonania w ramach tej procedury. |
||||||
EndFunction |
Kończy definicję tej procedury. |
Uwagi
Cały kod wykonywalny musi być wewnątrz procedury.Z kolei każda procedura zadeklarowana w obrębie klasy, struktury lub moduł, który jest określany jako zawierające klasy, struktury lub moduł.
Aby zwrócić wartość do kodu wywołującego, należy użyć Function procedury; w przeciwnym razie użyj Sub procedury.
Definiowanie funkcji
Można zdefiniować Function procedura tylko na poziomie modułu.W związku z tym w kontekście deklaracji funkcji musi być klasy, struktury, moduł lub interfejs i nie może być plikiem źródłowym, obszar nazw, procedury lub bloku.Aby uzyskać więcej informacji, zobacz Kontekst deklaracji i domyślne poziomy dostępu (Visual Basic).
FunctionDomyślnie procedur dostępu publicznego.Można dostosować ich poziomy dostępu za pomocą modyfikatorów dostępu.
A Function procedury można zadeklarować typ danych wartości, która zwraca procedury.Można określić dowolny typ danych lub nazwę wyliczenia, struktury, klasy lub interfejsu.Jeśli nie określisz returntype parametr, procedura zwraca Object.
Jeśli ta procedura używa Implements słowa kluczowego, zawierający klasy lub struktury musi również mieć Implements instrukcji następującej bezpośrednio jej Class lub Structure instrukcji.Implements Instrukcja musi zawierać każdego interfejsu, która jest określona w implementslist.Niemniej jednak nazwa, przez który definiuje interfejs Function (w definedname) nie musi być zgodna z nazwą tej procedury (w name).
[!UWAGA]
Do definiowania funkcji wyrażeń inline, można użyć wyrażenia lambda.Aby uzyskać więcej informacji, zobacz Function — Wyrażenie (Visual Basic) i Lambda — Wyrażenia (Visual Basic).
Powrót z funkcji
Gdy Function procedura zwraca do kodu wywołującego, kontynuuje wykonywanie instrukcji następującej instrukcji, która wywołała procedurę.
Zwraca wartość funkcji, można przypisać wartość nazwy funkcji lub umieścić go w Return instrukcji.
Return Instrukcja przypisuje wartość zwracana jednocześnie i kończy działanie funkcji, jak pokazano w następującym przykładzie.
Function myFunction(ByVal j As Integer) As Double
Return 3.87 * j
End Function
Poniższy przykład przypisuje wartość zwracana nazwa funkcji myFunction , a następnie używa Exit Function instrukcja zwraca.
Function myFunction(ByVal j As Integer) As Double
myFunction = 3.87 * j
Exit Function
End Function
Exit Function i Return instrukcje spowodować natychmiastowe wyjście z Function procedury.Dowolną liczbę Exit Function i Return instrukcji może występować w dowolnym miejscu procedury, i można mieszać Exit Function i Return instrukcji.
Jeśli korzystasz z Exit Function bez przypisywania wartości do name, procedura zwraca wartość domyślną dla typu danych, która jest określona w returntype.Jeśli returntype nie jest określony, procedura zwraca Nothing, która jest wartością domyślną dla Object.
Wywołanie funkcji
Należy wywołać Function procedurę przy użyciu nazwy procedury, następuje lista argumentów w nawiasach, w wyrażeniu.Nawiasy można pominąć, tylko wtedy, gdy nie są dostarczanie żadnych argumentów.Jednakże kod jest bardziej czytelny, jeśli zawsze używać nawiasów.
Należy wywołać Function procedury, w taki sam sposób, że wywołania dowolnej biblioteki funkcji, takich jak Sqrt, Cos, lub ChrW.
Można również wywołać funkcję za pomocą Call słowa kluczowego.W takim przypadku zwracana wartość jest ignorowana.Korzystać z Call słowo kluczowe nie jest zalecane w większości przypadków.Aby uzyskać więcej informacji, zobacz Call — Instrukcja (Visual Basic).
Visual Basic Reorganizuje czasami wyrażenia arytmetycznego zwiększyć efektywność.Z tego powodu nie powinno się używać Function procedury w wyrażenia arytmetycznego, gdy funkcja powoduje zmianę wartości zmiennych w tym samym wyrażeniu.
Funkcje komunikacji asynchronicznej
Asynchroniczne funkcja pozwala wywoływać funkcje asynchronicznego bez użycia jawnego wywołania zwrotne lub Ręczne dzielenie kodu wielu funkcji lub wyrażenia lambda.
Jeśli oznaczysz funkcji z asynchroniczne modyfikator, można użyć oczekiwać operator w funkcji.Kiedy sterowania osiąga Await wyrażenie w Async funkcji, sterowanie powraca do wywołującego i postępu w funkcji jest zawieszone aż do zakończenia zadania oczekiwany.Po wykonaniu zadania w funkcji wznowić wykonywanie.
[!UWAGA]
Async Procedura zwraca się do rozmówcy po albo napotkaniu pierwszego Oczekiwany obiekt, który nie jest jeszcze zakończona lub dojdzie do końca Async procedury, nastąpi wcześniej.
Async Funkcja może mieć typ zwracany z Task lub Task.Przykład Async funkcja zwraca typ Task zamieszczono poniżej.
Async Funkcji nie można zadeklarować dowolną ByRef parametry.
A Sub — Instrukcja (Visual Basic) może być również oznaczone z Async modyfikatora.To służy przede wszystkim do obsługi zdarzeń, których wartość nie może być zwrócona.AsyncSub Nie może być oczekiwany procedury i wywołujący AsyncSub procedura nie może przechwytywać wyjątków, przez Sub procedury.
Aby uzyskać więcej informacji o Async funkcji, zobacz Programowanie asynchroniczne z Async i Await (C# i Visual Basic), Przepływ sterowania w aplikacjach asynchronicznych (C# i Visual Basic), i Asynchroniczne typy zwracane (C# i Visual Basic).
Funkcja sterująca
Sterująca funkcja wykonuje niestandardowe iteracji przez kolekcję, takie jak listy lub tablicy.Funkcja sterująca używa plon instrukcja zwraca każdy jeden element naraz.Gdy plon instrukcja zostanie osiągnięty, bieżącej lokalizacji w kodzie jest zapamiętany.Wykonanie jest uruchamiany ponownie z tej lokalizacji w następnym razem zostanie wywołana funkcja sterująca.
Wywołanie iterację z kodu klienta za pomocą dla każdego...Następny instrukcji.
Zwracany typ funkcja sterująca może być IEnumerable, IEnumerable, IEnumerator, lub IEnumerator.
Aby uzyskać więcej informacji, zobacz Iteratory (C# i Visual Basic).
Przykład
W poniższym przykładzie użyto Function instrukcja declare, nazwa, parametry i kod, który tworzy ciało Function procedury.ParamArray Modyfikatora umożliwia funkcja zaakceptować zmienną liczbę argumentów.
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
Poniższy przykład wywołuje funkcja zadeklarowana w poprzednim przykładzie.
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
W poniższym przykładzie DelayAsync jest AsyncFunction który ma zwracany typ Task. DelayAsyncma Return instrukcja, która zwraca liczbę całkowitą.Dlatego funkcja deklaracji DelayAsync musi mieć typ zwracany z Task(Of Integer).Ponieważ typ zwracany jest Task(Of Integer), oceny Await wyrażenie w DoSomethingAsync daje całkowitą.Jest to zademonstrowane w tej instrukcji: Dim result As Integer = Await delayTask.
startButton_Click Procedura jest przykładem Async Sub procedury.Bo DoSomethingAsync jest Async funkcji, zadania dla wywołania DoSomethingAsync musi być oczekiwany, jak pokazuje poniższa instrukcja: Await DoSomethingAsync().startButton_ClickSub Procedura musi być zdefiniowana z Async modyfikator ponieważ ma on Await wyrażenie.
' Imports System.Diagnostics
' Imports System.Threading.Tasks
' This Click event is marked with the Async modifier.
Private Async Sub startButton_Click(sender As Object, e As RoutedEventArgs) Handles startButton.Click
Await DoSomethingAsync()
End Sub
Private Async Function DoSomethingAsync() As Task
Dim delayTask As Task(Of Integer) = DelayAsync()
Dim result As Integer = Await delayTask
' The previous two statements may be combined into
' the following statement.
' Dim result As Integer = Await DelayAsync()
Debug.WriteLine("Result: " & result)
End Function
Private Async Function DelayAsync() As Task(Of Integer)
Await Task.Delay(100)
Return 5
End Function
' Output:
' Result: 5
Zobacz też
Zadania
Porady: używanie klasy ogólnej (Visual Basic)
Procedury rozwiązywania problemów (Visual Basic)
Informacje
Sub — Instrukcja (Visual Basic)
Lista parametrów (Visual Basic)
Dim — Instrukcja (Visual Basic)
Call — Instrukcja (Visual Basic)
Function — Wyrażenie (Visual Basic)
Koncepcje
Procedury funkcji (Visual Basic)