Sub, instruction (Visual Basic)

Déclare le nom, les paramètres et le code qui définissent une procédure Sub.

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

Composants

Terme

Définition

attributelist

Optionnel. Consultez Liste d'attributs.

Partial

Optionnel. Indique la définition d'une méthode partielle. Consultez Méthodes partielles (Visual Basic).

accessmodifier

Optionnel. Il peut s'agir de l'une des valeurs suivantes :

Consultez Niveaux d'accès dans Visual Basic.

proceduremodifiers

Optionnel. Il peut s'agir de l'une des valeurs suivantes :

Shared

Optionnel. Consultez Shared.

Shadows

Optionnel. Consultez Shadows.

Async

Optionnel. Consultez l' Async.

name

Requis. Nom de la procédure. Consultez Noms d'éléments déclarés (Visual Basic). Pour créer une procédure de constructeur pour une classe, affectez au nom d'une procédure Sub le mot clé New. Pour plus d’informations, consultez Durée de vie d'un objet : création et destruction des objets (Visual Basic).

typeparamlist

Optionnel. Liste des paramètres de type pour une procédure générique. Consultez Liste de types.

parameterlist

Optionnel. Liste des noms de variables locales représentant les paramètres de cette procédure. Consultez Liste de paramètres (Visual Basic).

Implements

Optionnel. Indique que cette procédure implémente une ou plusieurs procédures Sub, chacune étant définie dans une interface implémentée par la classe ou la structure conteneur de cette procédure. Consultez Implements, instruction.

implementslist

Requis si Implements est fourni. Liste des procédures Sub implémentées.

implementedprocedure [ , implementedprocedure ... ]

Chaque implementedprocedure emploie la syntaxe et les paramètres suivants :

interface.definedname

Élément

Description

interface

Requis. Nom d'une interface implémentée par la classe ou la structure conteneur de cette procédure.

definedname

Requis. Nom par lequel la procédure est définie dans interface.

Handles

Optionnel. Indique que cette procédure peut gérer un ou plusieurs événements spécifiques. Consultez Handles, clause (Visual Basic).

eventlist

Requis si Handles est fourni. Liste des événements gérés par cette procédure.

eventspecifier [ , eventspecifier ... ]

Chaque eventspecifier emploie la syntaxe et les éléments suivants :

eventvariable.event

Élément

Description

eventvariable

Requis. Variable objet déclarée avec le type de données de la classe ou de la structure qui déclenche l'événement.

event

Requis. Nom de l'événement géré par cette procédure.

statements

Optionnel. Bloc d'instructions à exécuter dans cette procédure.

End Sub

Met fin à la définition de cette procédure.

Notes

Tout le code exécutable doit se trouver à l'intérieur d'une procédure. Utilisez une procédure d' Sub lorsque vous ne souhaitez pas retourner une valeur au code appelant. Utilisez une procédure d' Function lorsque vous souhaitez retourner une valeur.

Définir une procédure sub

Vous pouvez définir une procédure d' Sub uniquement au niveau de le module. Le contexte de déclaration d'une procédure sub, par conséquent, doit être une classe, une structure, un module, ou une interface et ne peut pas être un fichier source, espace de noms, une procédure, ou un bloc. Pour plus d’informations, consultez Contextes de déclaration et niveaux d'accès par défaut (Visual Basic).

Les procédures Sub disposent par défaut d'un accès public. Vous pouvez ajuster leurs niveaux d'accès en utilisant les modificateurs d'accès.

Si la procédure utilise le mot clé d' Implements , la classe conteneur ou la structure doit avoir une instruction d' Implements qui suit immédiatement l'instruction d' Class ou d' Structure . L'instruction d' Implements doit inclure chaque interface qui est spécifiée dans implementslist. Toutefois, le nom selon lequel une interface définit Sub (dans definedname) ne doit pas correspondre au nom de cette procédure (dans name).

Le retour d'une procédure sub

Lorsque la procédure retourne d' Sub au code appelant, exécution reprend l'instruction après l'instruction qui l'a appelée.

L'exemple suivant affiche un retour d'une procédure Sub.

Sub mySub(ByVal q As String)
    Return
End Sub 

Les instructions Exit Sub et Return provoquent la sortie immédiate d'une procédure Sub. Plusieurs instructions Exit Sub et Return peuvent apparaître n'importe où dans la procédure, et vous pouvez associer des instructions Exit Sub et Return.

Appeler une procédure sub

Vous appelez une procédure d' Sub à l'aide de le nom de procédure dans une instruction puis en suivant ce nom à la liste d'arguments entre parenthèses. Vous pouvez mettre les parenthèses uniquement si vous ne fournissez pas d'arguments. Toutefois, votre code est plus lisible si vous incluez toujours les parenthèses.

Une procédure d' Sub et une procédure d' Function peuvent avoir des paramètres et exécuter une série d'instructions. Toutefois, la procédure retourne d' Function une valeur, et une procédure d' Sub pas. Par conséquent, vous ne pouvez pas utiliser une procédure d' Sub dans une expression.

Vous pouvez utiliser le mot clé d' Call lorsque vous appelez une procédure d' Sub , mais ce mot clé n'est pas recommandé pour la plupart des fonctionnalités. Pour plus d’informations, consultez Call, instruction (Visual Basic).

Visual Basic réorganise quelquefois les expressions arithmétiques de manière à optimiser l'efficacité interne. Pour cette raison, si votre liste d'arguments inclut les expressions qui appellent d'autres procédures, vous ne devez pas supposer que ces expressions sont appelées dans un ordre particulier.

Procédures Async Sub

À l'aide de la fonctionnalité Async, vous pouvez appeler des fonctions asynchrones sans utiliser des rappels explicites ou fractionner manuellement votre code entre des fonctions ou des expressions lambda multiples.

Si vous marquez une procédure avec le modificateur d' Async , vous pouvez utiliser l'opérateur d' attendez dans la procédure. Lorsque le contrôle atteint une expression d' Await dans la procédure d' Async , le contrôle retourne à l'appelant, et la progression de la procédure est interrompue jusqu'à ce que la tâche se termine attendue. Lorsque la tâche est terminée, l'opération peut continuer dans la procédure.

Notes

Une procédure retourne d' Async à l'appelant lorsque l'un ou l'autre que l'objet d'abord attendu qui n'est pas encore complet est produit ou à la fin de la procédure d' Async est atteint, ce qui se produit en premier.

Vous pouvez également marquer Function, instruction (Visual Basic) avec le modificateur d' Async . Une fonction d' Async peut avoir un type de retour d' Task ou d' Task. Un exemple plus loin dans cette rubrique illustre une fonction d' Async dont le type de retour d' Task.

Les procédures d'AsyncSub sont principalement utilisées pour les gestionnaires d'événements, où une valeur ne peut pas être retournée. Une procédure d' AsyncSub ne peut pas être attendue, et l'appel d'une procédure d' AsyncSub ne peut pas intercepter des exceptions que la procédure d' Sub lève.

Une procédure d' Async ne peut déclarer des paramètres de ByRef .

Pour plus d'informations sur les procédures d' Async , consultez Programmation asynchrone avec Async et Await (C# et Visual Basic), Flux de contrôle dans les programmes Async (C# et Visual Basic), et l' Types de retour Async (C# et Visual Basic).

Exemple

L'exemple suivant utilise l'instruction Sub pour définir le nom, les paramètres et le code qui forment le corps d'une procédure 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

Dans l'exemple suivant, DelayAsync est AsyncFunction dont le type de retour d' Task. DelayAsync a une instruction d' Return qui retourne un entier. Par conséquent, la déclaration de fonction d' DelayAsync doit avoir un type de retour d' Task(Of Integer). Étant donné que le type de retour est Task(Of Integer), l'évaluation de l'expression d' Await dans DoSomethingAsync produit un entier, comme l'instruction suivante : Dim result As Integer = Await delayTask.

La procédure d' startButton_Click est un exemple d'une procédure d' Async Sub . Étant donné qu' DoSomethingAsync est une fonction d' Async , la tâche de l'appel à DoSomethingAsync doit être attendue, comme l'instruction suivante : Await DoSomethingAsync(). La procédure d' startButton_ClickSub doit être définie avec le modificateur d' Async car il a une expression d' 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

Voir aussi

Tâches

Comment : utiliser une classe générique (Visual Basic)

Procédures de dépannage (Visual Basic)

Référence

Implements, instruction

Function, instruction (Visual Basic)

Liste de paramètres (Visual Basic)

Dim, instruction (Visual Basic)

Call, instruction (Visual Basic)

Of, clause (Visual Basic)

Concepts

Tableaux de paramètres (Visual Basic)

Méthodes partielles (Visual Basic)