Condividi tramite


Istruzione Sub (Visual Basic)

Consente di dichiarare il nome, i parametri e il codice con i quali si definisce una routine Sub.

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

Parti

Termine

Definizione

attributelist

Opzionale. Vedere Elenco degli attributi.

Partial

Opzionale. Indica la definizione di un metodo parziale. Vedere Metodi parziali (Visual Basic).

accessmodifier

Opzionale. ad esempio uno dei seguenti:

Vedere Livelli di accesso in Visual Basic.

proceduremodifiers

Opzionale. ad esempio uno dei seguenti:

Shared

Opzionale. Vedere Shared.

Shadows

Opzionale. Vedere Shadows.

Async

Opzionale. Vedere Asincrono.

name

Necessario. Nome della routine. Vedere Nomi di elementi dichiarati (Visual Basic). Per creare una routine del costruttore per una classe, impostare il nome di una routine Sub sulla parola chiave New. Per ulteriori informazioni, vedere Durata degli oggetti: come creare e distruggere oggetti (Visual Basic).

typeparamlist

Opzionale. Elenco dei parametri di tipo per una routine generica. Vedere Elenco dei tipi.

parameterlist

Opzionale. Elenco dei nomi di variabili locali che rappresentano i parametri di questa routine. Vedere Elenco dei parametri (Visual Basic).

Implements

Opzionale. Consente di indicare che questa procedura implementa una o più routine Sub, ognuna definita in un'interfaccia implementata della classe o dalla struttura contenente la routine. Vedere Istruzione Implements.

implementslist

Obbligatoria se viene fornita Implements. Elenco di routine Sub implementate.

implementedprocedure [ , implementedprocedure ... ]

Ogni implementedprocedure presenta la sintassi e le parti seguenti:

interface.definedname

Parte

Descrizione

interface

Necessario. Nome di un'interfaccia implementata dalla classe o struttura contenente questa routine.

definedname

Necessario. Nome mediante il quale la routine viene definita in interface.

Handles

Opzionale. Consente di indicare che questa routine è in grado di gestire uno o più eventi specifici. Vedere Clausola Handles (Visual Basic).

eventlist

Obbligatoria se viene fornita Handles. Elenco di eventi gestiti dalla routine.

eventspecifier [ , eventspecifier ... ]

Ogni eventspecifier presenta la sintassi e le parti seguenti:

eventvariable.event

Parte

Descrizione

eventvariable

Necessario. La variabile oggetto dichiarata con il tipo di dati della classe o della struttura che genera l'evento.

event

Necessario. Nome dell'evento gestito dalla routine.

statements

Opzionale. Blocco di istruzioni da eseguire nella routine.

End Sub

Consente di terminare la definizione di questa routine.

Note

È necessario che il codice eseguibile sia inserito all'interno di una routine. Seguire una procedura Sub quando non si desidera restituire un valore al codice chiamante. Seguire una procedura Function per restituire un valore.

Definizione della routine Sub

È possibile definire una routine Sub solo a livello di modulo. Il contesto della dichiarazione di in una routine deve, pertanto, essere una classe, una struttura, un modulo, o un'interfaccia e non può essere un file di origine, uno spazio dei nomi, una routine, oppure un blocco. Per ulteriori informazioni, vedere Contesti delle dichiarazioni e livelli di accesso predefiniti (Visual Basic).

L'impostazione predefinita delle routine Sub è l'accesso pubblico. È possibile modificare i livelli di accesso utilizzando i modificatori di accesso.

Se la routine utilizza la parola chiave Implements, la classe o la struttura contenente deve contenere un'istruzione Implements immediatamente successivo alla relativa istruzione Structure o Class. L'istruzione Implements deve includere ogni interfaccia specificata in implementslist. Tuttavia, il nome da un'interfaccia definisce Sub (in definedname) non deve corrispondere al nome della routine (in name).

Chiusura di una routine Sub

Quando la routine Sub al codice chiamante, l'esecuzione continua con un'istruzione dopo l'istruzione che lo ha chiamato.

Nell'esempio seguente viene illustrato un ritorno da una routine Sub.

Sub mySub(ByVal q As String)
    Return
End Sub 

Le istruzioni Exit Sub e Return provocano un'uscita immediata da una routine Sub. Qualsiasi numero delle istruzioni Exit Sub e Return può essere visualizzato in un punto qualsiasi della procedura ed è possibile mescolare le istruzioni Exit Sub e Return.

Chiamare una routine Sub

Chiama una routine Sub utilizzando il nome di routine in un'istruzione e quindi dopo il nome con il relativo elenco di argomenti tra parentesi. È possibile omettere le parentesi solo se non viene fornito alcun argomento. Il codice sarà tuttavia più leggibile se si includono sempre le parentesi.

Una routine Sub e una routine Function possono avere parametri ed eseguire una serie di istruzioni. Tuttavia, la routine restituisce Function di un valore e una routine Sub contrario. Di conseguenza, non è possibile eseguire una routine Sub in un'espressione.

È possibile utilizzare la parola chiave Call quando si chiama una routine Sub, ma la parola chiave non consigliato nella maggior parte di utilizzare. Per ulteriori informazioni, vedere Istruzione Call (Visual Basic).

 In Visual Basic le espressioni aritmetiche vengono a volte riorganizzate per migliorare il grado di efficienza interno. Per questo motivo, se l'elenco di argomenti sono incluse le espressioni che chiamano altre, non occorre considerare che tali espressioni saranno definite in un determinato ordine.

Routine Sub di Async

Tramite la funzionalità di Asincrona, è possibile richiamare funzioni asincrone senza utilizzare i callback espliciti o dividere manualmente il codice attraverso più funzioni o le espressioni lambda.

Se si contrassegna una routine con il modificatore Asincrono, è possibile utilizzare l'operatore Attendere nella routine. Quando il controllo raggiunge un'espressione Await nella routine Async, il controllo torna il chiamante e lo stato di avanzamento nella routine viene sospeso finché l'attività attesa non completi. Quando l'attività è stata completata, l'esecuzione può riattivare la routine.

Nota

La routine Async al chiamante quando uno che l'oggetto innanzitutto attesa che non è ancora completa sia rilevato o la fine della routine Async viene raggiunto, qualsiasi si verifica prima.

È inoltre possibile contrassegnare Istruzione Function (Visual Basic) con il modificatore Async. Una funzione Async può avere un tipo restituito Task o Task. Un esempio più avanti in questo argomento viene illustrata una funzione Async con un tipo restituito Task.

Le procedure diAsyncSub sono utilizzate principalmente per i gestori eventi, in cui un valore non può essere restituito. Una routine AsyncSub non può essere sospeso e il chiamante di una routine AsyncSub impossibile intercettare le eccezioni che la routine Sub generato.

Una routine Async impossibile dichiarare parametri ByRef.

Per ulteriori informazioni sulle procedure Async, vedere Programmazione asincrona con Async e Await (C# e Visual Basic), Flusso di controllo in programmi asincroni (C# e Visual Basic)e Tipi restituiti asincroni (C# e Visual Basic).

Esempio

Nell'esempio seguente l'istruzione Sub viene utilizzata per definire il nome, i parametri e il codice che formano il corpo di una routine Sub.

Sub computeArea(ByVal length As Double, ByVal width As Double)
    ' Declare local variable. 
    Dim area As Double 
    If length = 0 Or width = 0 Then 
        ' If either argument = 0 then exit Sub immediately. 
        Exit Sub 
    End If 
    ' Calculate area of rectangle.
    area = length * width
    ' Print area to Immediate window.
    Debug.WriteLine(area)
End Sub

Nell'esempio seguente, DelayAsync è AsyncFunction con un tipo restituito Task. DelayAsync ha un'istruzione Return che restituisce un Integer. Pertanto, la dichiarazione di funzione DelayAsync deve avere un tipo restituito Task(Of Integer). Poiché il tipo restituito è Task(Of Integer), la valutazione di un'espressione Await in DoSomethingAsync produce un intero, come illustrato nell'istruzione seguente: Dim result As Integer = Await delayTask.

La routine startButton_Click è un esempio di una routine Async Sub. Poiché DoSomethingAsync è una funzione Async, l'attività per la chiamata a DoSomethingAsync deve essere sospeso, come illustrato nell'istruzione seguente: Await DoSomethingAsync(). La routine startButton_ClickSub deve essere definita con il modificatore Async perché ha un'espressione Await.

' 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 anche

Attività

Procedura: utilizzare una classe generica (Visual Basic)

Risoluzione dei problemi relativi alle routine (Visual Basic)

Riferimenti

Istruzione Implements

Istruzione Function (Visual Basic)

Elenco dei parametri (Visual Basic)

Istruzione Dim (Visual Basic)

Istruzione Call (Visual Basic)

Clausola Of (Visual Basic)

Concetti

Matrici di parametri (Visual Basic)

Metodi parziali (Visual Basic)