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: |
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
ParteDescrizione
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
ParteDescrizione
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. |
EndSub |
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<TResult> o Task.Un esempio più avanti in questo argomento viene illustrata una funzione Async con un tipo restituito Task<TResult>.
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<TResult>.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 Function (Visual Basic)
Elenco dei parametri (Visual Basic)
Istruzione Call (Visual Basic)