Udostępnij za pośrednictwem


Instrukcji funkcyjnej (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 programie 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 Nazwy elementów deklarowanej (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 Instrukcja implementuje.

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

CzęśćOpis
interface Wymagane.Nazwa interfejsu zaimplementowanego przez tę procedurę zawierający klasy lub struktury.
definedname Wymagane.Nazwa, w którym procedura została określona w interface.

Handles

Opcjonalne.Wskazuje, że procedura ta może obsługiwać jeden lub więcej określonych zdarzeń.Zobacz Klauzula Handles (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

CzęśćOpis
eventvariable Wymagane.Zmienna obiektu zadeklarowane z typem danych klasy lub struktury, która wywołuje zdarzenie.
event Wymagane.Nazwy zdarzeń, który obsługuje tę procedurę.

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 Konteksty deklaracji i poziomy dostępu domyślne (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 Wyrażenie funkcyjne (Visual Basic) i Wyrażenia lambda (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 Instrukcji Call (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<TResult> lub Task.Przykład Async funkcja zwraca typ Task<TResult> zamieszczono poniżej.

Async Funkcji nie można zadeklarować dowolną ByRef parametry.

A Instrukcja Sub (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 Asynchroniczne programowania przy użyciu asynchronicznej i poczekać (C# i Visual Basic), Przepływ sterowania w programach Async (C# i Visual Basic), i Typy zwrotu Async (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<T>, IEnumerator, lub IEnumerator<T>.

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<TResult>. 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

Jak: Użyj klasą rodzajową (Visual Basic)

Procedury rozwiązywania problemów (Visual Basic)

Informacje

Instrukcja Sub (Visual Basic)

Lista parametrów (Visual Basic)

Dim instrukcji (Visual Basic)

Instrukcji Call (Visual Basic)

Klauzuli (Visual Basic)

Wyrażenie funkcyjne (Visual Basic)

Koncepcje

Procedury typu Function (Visual Basic)

Tablic parametrów (Visual Basic)

Wyrażenia lambda (Visual Basic)