Istruzione Function (Visual Basic)Function Statement (Visual Basic)

Dichiara il nome, parametri e il codice che definiscono un Function procedure.Declares the name, parameters, and code that define a Function procedure.

SintassiSyntax

[ <attributelist> ] [ accessmodifier ] [ proceduremodifiers ] [ Shared ] [ Shadows ] [ Async | Iterator ]
Function name [ (Of typeparamlist) ] [ (parameterlist) ] [ As returntype ] [ Implements implementslist | Handles eventlist ]
    [ statements ]
    [ Exit Function ]
    [ statements ]
End Function

PartiParts

  • attributelist

    Facoltativo.Optional. Visualizzare elenco attributi.See Attribute List.

  • accessmodifier

    Facoltativo.Optional. Può essere uno dei seguenti:Can be one of the following:

    Vedere Access levels in Visual Basic.See Access levels in Visual Basic.

  • proceduremodifiers

    Facoltativo.Optional. Può essere uno dei seguenti:Can be one of the following:

  • Shared

    Facoltativo.Optional. Visualizzare condiviso.See Shared.

  • Shadows

    Facoltativo.Optional. Visualizzare Shadows.See Shadows.

  • Async

    Facoltativo.Optional. Visualizzare Async.See Async.

  • Iterator

    Facoltativo.Optional. Visualizzare iteratore.See Iterator.

  • name

    Obbligatorio.Required. Nome della procedura.Name of the procedure. Vedere Declared Element Names.See Declared Element Names.

  • typeparamlist

    Facoltativo.Optional. Elenco di parametri di tipo per una routine generica.List of type parameters for a generic procedure. Visualizzare elenco dei tipi.See Type List.

  • parameterlist

    Facoltativo.Optional. Elenco di nomi delle variabili locali che rappresentano i parametri di questa procedura.List of local variable names representing the parameters of this procedure. Visualizzare elenco di parametri.See Parameter List.

  • returntype

    Obbligatorio se Option Strict è On.Required if Option Strict is On. Tipo di dati del valore restituito da questa procedura.Data type of the value returned by this procedure.

  • Implements

    Facoltativo.Optional. Indica che questa procedura consente di implementare uno o più Function procedure, ciascuno definito in un'interfaccia implementata dalla classe o struttura che contiene questa procedura.Indicates that this procedure implements one or more Function procedures, each one defined in an interface implemented by this procedure's containing class or structure. Visualizzare implementa istruzione.See Implements Statement.

  • implementslist

    Necessario se si fornisce Implements.Required if Implements is supplied. Elenco delle routine Function implementate.List of Function procedures being implemented.

    implementedprocedure [ , implementedprocedure ... ]

    Ogni implementedprocedure presenta la sintassi e le parti seguenti:Each implementedprocedure has the following syntax and parts:

    interface.definedname

    PartePart DescrizioneDescription
    interface Obbligatorio.Required. Classe o struttura contenente nome di un'interfaccia implementata da questa procedura.Name of an interface implemented by this procedure's containing class or structure.
    definedname Obbligatorio.Required. Nome mediante il quale la routine viene definita in interface.Name by which the procedure is defined in interface.
  • Handles

    Facoltativo.Optional. Indica che questa procedura può gestire uno o più eventi specifici.Indicates that this procedure can handle one or more specific events. Visualizzare gestisce.See Handles.

  • eventlist

    Necessario se si fornisce Handles.Required if Handles is supplied. Elenco di eventi che gestisce questa procedura.List of events this procedure handles.

    eventspecifier [ , eventspecifier ... ]

    Ogni eventspecifier presenta la sintassi e le parti seguenti:Each eventspecifier has the following syntax and parts:

    eventvariable.event

    PartePart DescrizioneDescription
    eventvariable Obbligatorio.Required. Variabile oggetto dichiarata con il tipo di dati della classe o struttura che genera l'evento.Object variable declared with the data type of the class or structure that raises the event.
    event Obbligatorio.Required. Nome dell'evento gestito da questa routine.Name of the event this procedure handles.
  • statements

    Facoltativo.Optional. Blocco di istruzioni da eseguire all'interno di questa procedura.Block of statements to be executed within this procedure.

  • End Function

    Termina la definizione di questa procedura.Terminates the definition of this procedure.

NoteRemarks

Tutto il codice eseguibile deve essere all'interno di una routine.All executable code must be inside a procedure. Ogni procedura, a sua volta, viene dichiarato all'interno di una classe, una struttura o un modulo che viene definito la classe, struttura o modulo che lo contiene.Each procedure, in turn, is declared within a class, a structure, or a module that is referred to as the containing class, structure, or module.

Per restituire un valore al codice chiamante, usare una Function procedure; in caso contrario, utilizzare un Sub procedure.To return a value to the calling code, use a Function procedure; otherwise, use a Sub procedure.

Definizione di una funzioneDefining a Function

È possibile definire un Function procedure solo a livello di modulo.You can define a Function procedure only at the module level. Pertanto, il contesto della dichiarazione per una funzione deve essere una classe, una struttura, un modulo o un'interfaccia e non può essere un file di origine, uno spazio dei nomi, una routine o un blocco.Therefore, the declaration context for a function must be a class, a structure, a module, or an interface and can't be a source file, a namespace, a procedure, or a block. Per altre informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti.For more information, see Declaration Contexts and Default Access Levels.

Function Per impostazione predefinita le procedure per l'accesso pubblico.Function procedures default to public access. È possibile modificare i livelli di accesso con i modificatori di accesso.You can adjust their access levels with the access modifiers.

Oggetto Function routine consente di dichiarare il tipo di dati del valore a cui la stored procedure restituisce.A Function procedure can declare the data type of the value that the procedure returns. È possibile specificare qualsiasi tipo di dati o il nome di un'enumerazione, una struttura, una classe o un'interfaccia.You can specify any data type or the name of an enumeration, a structure, a class, or an interface. Se non si specifica la returntype parametro, la stored procedure restituisce Object.If you don't specify the returntype parameter, the procedure returns Object.

Se questa procedura Usa il Implements parola chiave, alla classe o struttura deve anche avere un Implements istruzione che segue immediatamente relativo Class o Structure istruzione.If this procedure uses the Implements keyword, the containing class or structure must also have an Implements statement that immediately follows its Class or Structure statement. Il Implements istruzione deve includere ogni interfaccia specificata in implementslist.The Implements statement must include each interface that's specified in implementslist. Tuttavia, il nome mediante il quale definisce un'interfaccia di Function (in definedname) non deve corrispondere al nome di questa procedura (in name).However, the name by which an interface defines the Function (in definedname) doesn't need to match the name of this procedure (in name).

Nota

È possibile usare espressioni lambda per definire le espressioni di funzione inline.You can use lambda expressions to define function expressions inline. Per altre informazioni, vedere un'espressione di funzione e espressioni Lambda.For more information, see Function Expression and Lambda Expressions.

Restituzione da una funzioneReturning from a Function

Quando il Function routine restituisce al codice chiamante, l'esecuzione continua con l'istruzione che segue l'istruzione che ha chiamato la routine.When the Function procedure returns to the calling code, execution continues with the statement that follows the statement that called the procedure.

Per restituire un valore da una funzione, è possibile assegnare il valore per il nome della funzione o includerlo in un Return istruzione.To return a value from a function, you can either assign the value to the function name or include it in a Return statement.

Il Return istruzione contemporaneamente assegna il valore restituito e termina la funzione, come illustrato nell'esempio seguente.The Return statement simultaneously assigns the return value and exits the function, as the following example shows.

Function MyFunction(ByVal j As Integer) As Double
    Return 3.87 * j
End Function

L'esempio seguente assegna il valore restituito per il nome della funzione myFunction e quindi Usa il Exit Function istruzione da restituire.The following example assigns the return value to the function name myFunction and then uses the Exit Function statement to return.

Function MyFunction(ByVal j As Integer) As Double
    MyFunction = 3.87 * j
    Exit Function
End Function

Il Exit Function e Return istruzioni uscire immediatamente da un Function procedure.The Exit Function and Return statements cause an immediate exit from a Function procedure. Un numero qualsiasi di Exit Function e Return istruzioni possono trovarsi in qualsiasi punto della procedura, ed è possibile combinare Exit Function e Return istruzioni.Any number of Exit Function and Return statements can appear anywhere in the procedure, and you can mix Exit Function and Return statements.

Se si usa Exit Function senza assegnarle un valore per name, la procedura restituisce il valore predefinito per il tipo di dati specificato in returntype.If you use Exit Function without assigning a value to name, the procedure returns the default value for the data type that's specified in returntype. Se returntype non è specificato, viene restituito Nothing, ovvero il valore predefinito per Object.If returntype isn't specified, the procedure returns Nothing, which is the default value for Object.

Chiamata di una funzioneCalling a Function

Si chiama un Function procedure utilizzando il nome, seguito dall'elenco di argomenti racchiuso tra parentesi, in un'espressione.You call a Function procedure by using the procedure name, followed by the argument list in parentheses, in an expression. Solo se non fornire alcun argomento, è possibile omettere le parentesi.You can omit the parentheses only if you aren't supplying any arguments. Tuttavia, il codice è più leggibile se si includono sempre le parentesi.However, your code is more readable if you always include the parentheses.

Si chiama un Function procedure simile a quello di chiamare qualsiasi libreria funzione, ad esempio Sqrt, Cos, o ChrW.You call a Function procedure the same way that you call any library function such as Sqrt, Cos, or ChrW.

È anche possibile chiamare una funzione usando il Call (parola chiave).You can also call a function by using the Call keyword. In tal caso, il valore restituito viene ignorato.In that case, the return value is ignored. Usare il Call parola chiave non è consigliata nella maggior parte dei casi.Use of the Call keyword isn't recommended in most cases. Per altre informazioni, vedere istruzione Call.For more information, see Call Statement.

In alcuni casi, Visual Basic ridispone espressioni aritmetiche per aumentare l'efficienza interno.Visual Basic sometimes rearranges arithmetic expressions to increase internal efficiency. Per questo motivo, è consigliabile non usare un Function procedure in un'espressione aritmetica quando la funzione modifica il valore delle variabili nella stessa espressione.For that reason, you shouldn't use a Function procedure in an arithmetic expression when the function changes the value of variables in the same expression.

Funzioni asincroneAsync Functions

Il Async funzionalità consente di richiamare le funzioni asincrone senza usare callback espliciti o suddividere manualmente il codice in più funzioni o espressioni lambda.The Async feature allows you to invoke asynchronous functions without using explicit callbacks or manually splitting your code across multiple functions or lambda expressions.

Se si contrassegna una funzione con il Async modificatore, è possibile utilizzare il Await operatore nella funzione.If you mark a function with the Async modifier, you can use the Await operator in the function. Quando il controllo raggiunge un' Await espressione nel Async funzione, il controllo ritorna al chiamante e lo stato di avanzamento nella funzione viene sospeso fino al completamento dell'attività attesa.When control reaches an Await expression in the Async function, control returns to the caller, and progress in the function is suspended until the awaited task completes. Una volta completata l'attività, la funzione può riprendere l'esecuzione.When the task is complete, execution can resume in the function.

Nota

Un' Async routine viene restituito al chiamante quando rileva il primo oggetto atteso che non è ancora completo o raggiunge la fine del Async procedure, a seconda di quale si verifica per primo.An Async procedure returns to the caller when either it encounters the first awaited object that’s not yet complete, or it gets to the end of the Async procedure, whichever occurs first.

Un' Async funzione può avere un tipo restituito Task<TResult> o Task.An Async function can have a return type of Task<TResult> or Task. Un esempio di un' Async che presenta un tipo restituito della funzione Task<TResult> di seguito viene fornito.An example of an Async function that has a return type of Task<TResult> is provided below.

Un' Async funzione non può dichiarare ByRef parametri.An Async function cannot declare any ByRef parameters.

Oggetto istruzione Sub può essere contrassegnato anche con il Async modificatore.A Sub Statement can also be marked with the Async modifier. Viene utilizzato principalmente per i gestori eventi, in cui non è possibile restituire un valore.This is primarily used for event handlers, where a value cannot be returned. Un' Async Sub routine non può essere atteso e il chiamante di un Async Sub procedure non può intercettare le eccezioni generate dal Sub procedure.An Async Sub procedure can't be awaited, and the caller of an Async Sub procedure can't catch exceptions that are thrown by the Sub procedure.

Per altre informazioni sulle Async funzioni, vedere programmazione asincrona con Async e Await, flusso di controllo in programmi asincroni, e tipi restituiti asincroni.For more information about Async functions, see Asynchronous Programming with Async and Await, Control Flow in Async Programs, and Async Return Types.

Funzioni di iteratoreIterator Functions

Un' iteratore funzione esegue un'iterazione personalizzata su una raccolta, ad esempio un elenco o una matrice.An iterator function performs a custom iteration over a collection, such as a list or array. Funzione un iteratore Usa il Yield istruzione per restituire ogni elemento uno alla volta.An iterator function uses the Yield statement to return each element one at a time. Quando un Yield viene raggiunta l'istruzione, la posizione corrente nel codice viene memorizzata.When a Yield statement is reached, the current location in code is remembered. L'esecuzione viene riavviata a partire da quella posizione la volta successiva che viene chiamata la funzione iteratore.Execution is restarted from that location the next time the iterator function is called.

Chiamare un iteratore dal codice client usando un For Each... Avanti istruzione.You call an iterator from client code by using a For Each…Next statement.

Il tipo restituito di una funzione di iteratore può essere IEnumerable, IEnumerable<T>, IEnumerator, o IEnumerator<T>.The return type of an iterator function can be IEnumerable, IEnumerable<T>, IEnumerator, or IEnumerator<T>.

Per altre informazioni, vedere Iteratori.For more information, see Iterators.

EsempioExample

L'esempio seguente usa il Function istruzione per dichiarare il nome, parametri e codice che costituiscono il corpo di un Function procedure.The following example uses the Function statement to declare the name, parameters, and code that form the body of a Function procedure. Il ParamArray modificatore consente alla funzione di accettare un numero variabile di argomenti.The ParamArray modifier enables the function to accept a variable number of arguments.

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

EsempioExample

Nell'esempio seguente richiama la funzione dichiarata nell'esempio precedente.The following example invokes the function declared in the preceding example.

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

EsempioExample

Nell'esempio riportato di seguito DelayAsync è un Async Function che ha un tipo restituito di Task<TResult>.In the following example, DelayAsync is an Async Function that has a return type of Task<TResult>. DelayAsync ha un'istruzione Return che restituisce un numero intero.DelayAsync has a Return statement that returns an integer. Di conseguenza la dichiarazione della funzione di DelayAsync deve avere un tipo restituito Task(Of Integer).Therefore the function declaration of DelayAsync needs to have a return type of Task(Of Integer). Poiché il tipo restituito è Task(Of Integer), la valutazione del Await espressione in DoSomethingAsync genera un numero intero.Because the return type is Task(Of Integer), the evaluation of the Await expression in DoSomethingAsync produces an integer. Questa situazione è illustrata nella presente informativa: Dim result As Integer = Await delayTask.This is demonstrated in this statement: Dim result As Integer = Await delayTask.

Il startButton_Click procedure è un esempio di un Async Sub procedure.The startButton_Click procedure is an example of an Async Sub procedure. In quanto DoSomethingAsync è un Async (funzione), l'attività per la chiamata a DoSomethingAsync deve essere attesa, come illustrato di seguito l'istruzione seguente: Await DoSomethingAsync().Because DoSomethingAsync is an Async function, the task for the call to DoSomethingAsync must be awaited, as the following statement demonstrates: Await DoSomethingAsync(). Il startButton_Click Sub procedura deve essere definita con la Async modificatore perché contiene un Await espressione.The startButton_Click Sub procedure must be defined with the Async modifier because it has an Await expression.

' 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

Vedere ancheSee also