Structure, instruction

Déclare le nom d’une structure et introduit la définition des variables, propriétés, événements et procédures que la structure comprend.

Syntaxe

[ <attributelist> ] [ accessmodifier ] [ Shadows ] [ Partial ] _
Structure name [ ( Of typelist ) ]
    [ Implements interfacenames ]
    [ datamemberdeclarations ]
    [ methodmemberdeclarations ]
End Structure

Éléments

Terme Définition
attributelist Optionnel. Consultez la Liste des attributs.
accessmodifier Optionnel. Il peut s'agir d'une des méthodes suivantes :

- Public
- Protected
- Friend
- Privé
- Ami protégé
- Private Protected

Consultez Access levels in Visual Basic.
Shadows Optionnel. Consultez Shadows.
Partial Optionnel. Indique une définition partielle de la structure. Voir Partiel.
name Obligatoire. Nom de cette structure. Consultez Declared Element Names.
Of Optionnel. Spécifie qu’il s’agit d’une structure générique.
typelist Obligatoire si vous utilisez le mot clé Of . Liste des paramètres de type pour cette structure. Consultez la liste de types.
Implements Optionnel. Indique que cette structure implémente les membres d’une ou plusieurs interfaces. Voir l’instruction Implements.
interfacenames Obligatoire si vous utilisez l’instruction Implements . Noms des interfaces implémentées par cette structure.
datamemberdeclarations Obligatoire. Zéro ou plusieurs instructions Const, Dim, Enumou Event déclarant les membres de données de la structure.
methodmemberdeclarations Optionnel. Zéro ou plusieurs déclarations de Function, Operator, Propertyou procédures Sub, qui servent de membres de méthode de la structure.
End Structure Obligatoire. Met fin à la définition Structure.

Notes

L’instruction Structure définit un type de valeur composite que vous pouvez personnaliser. Une structure est une généralisation du type défini par l’utilisateur (UDT) des versions précédentes de Visual Basic. Pour plus d’informations, consultez Structures.

Les structures prennent en charge la plupart des mêmes fonctionnalités que les classes. Par exemple, les structures peuvent avoir des propriétés et des procédures, elles peuvent implémenter des interfaces, et elles peuvent avoir des constructeurs paramétrables. Toutefois, il existe des différences significatives entre les structures et les classes dans des domaines tels que l’héritage, les déclarations et l’utilisation. En outre, les classes sont des types de référence et des structures sont des types valeur. Pour plus d’informations, consultez Structures et Classes.

Vous pouvez utiliser Structure uniquement au niveau de l’espace de noms ou du module. Cela signifie que le contexte de déclaration pour une structure doit être un fichier source, un espace de noms, une classe, une structure, un module ou une interface, et ne peut pas être une procédure ou un bloc. Pour plus d’informations, consultez Contextes de déclaration et niveaux d’accès par défaut.

Structures par défaut pour l’accès ami. Vous pouvez ajuster leurs niveaux d’accès avec les modificateurs d’accès. Pour plus d’informations, consultez Niveaux d’accès en Visual Basic.

Règles

  • Imbrication. Vous pouvez définir une structure dans une autre. La structure externe est appelée structure contenante, et la structure interne est appelée structure imbriquée. Toutefois, vous ne pouvez pas accéder aux membres d’une structure imbriquée par le biais de la structure conteneur. Au lieu de cela, vous devez déclarer une variable du type de données de la structure imbriquée.

  • Déclaration de membre. Vous devez déclarer chaque membre d’une structure. Un membre de structure ne peut pas être protégé ou Protected Friend, car rien ne peut hériter d’une structure. Toutefois, la structure elle-même peut être Protected ou Protected Friend.

    Vous pouvez déclarer zéro ou plusieurs variables non partagés ou des événements non partagés et noncustomés dans une structure. Vous ne pouvez pas avoir uniquement des constantes, des propriétés et des procédures, même si certaines d’entre elles ne sont pas partagés.

  • Initialisation. Vous ne pouvez pas initialiser la valeur d’un membre de données non partagé d’une structure dans le cadre de sa déclaration. Vous devez initialiser un tel membre de données au moyen d’un constructeur paramétrable sur la structure, ou affecter une valeur au membre après avoir créé une instance de la structure.

  • Héritage. Une structure ne peut hériter d’aucun type autre que ValueType, dont toutes les structures héritent. En particulier, une structure ne peut pas hériter d’une autre.

    Vous ne pouvez pas utiliser l’instruction Hérite dans une définition de structure, même pour spécifier ValueType.

  • Implémentation : Si la structure utilise l’instruction Implements, vous devez implémenter chaque membre défini par chaque interface que vous spécifiez dans interfacenames.

  • Propriété par défaut. Une structure peut spécifier au maximum une propriété comme propriété par défaut, à l’aide du modificateur par défaut. Pour plus d’informations, consultez par défaut.

Comportement

  • Niveau d’accès. Dans une structure, vous pouvez déclarer chaque membre avec son propre niveau d’accès. Tous les membres de structure par défaut accès public . Notez que si la structure elle-même a un niveau d’accès plus restreint, cela limite automatiquement l’accès à ses membres, même si vous ajustez leurs niveaux d’accès avec les modificateurs d’accès.

  • Portée. Une structure est dans l’étendue de son espace de noms, de sa classe, de sa structure ou de son module contenant.

    L’étendue de chaque membre de structure est la structure entière.

  • Durée de vie. Une structure n’a pas de durée de vie. Au lieu de cela, chaque instance de cette structure a une durée de vie indépendante de toutes les autres instances.

    La durée de vie d’une instance commence lorsqu’elle est créée par une clause New Operator . Elle se termine lorsque la durée de vie de la variable qui la contient se termine.

    Vous ne pouvez pas étendre la durée de vie d’une instance de structure. Une approximation des fonctionnalités de structure statique est fournie par un module. Pour plus d’informations, consultez l’instruction module.

    Les membres de structure ont des durées de vie en fonction de la façon et de l’emplacement où ils sont déclarés. Pour plus d’informations, consultez « Durée de vie » dans instruction de classe.

  • Qualification. Le code en dehors d’une structure doit qualifier le nom d’un membre avec le nom de cette structure.

    Si le code à l’intérieur d’une structure imbriquée fait une référence non qualifiée à un élément de programmation, Visual Basic recherche d’abord l’élément dans la structure imbriquée, puis dans sa structure contenante, et ainsi de suite vers l’élément le plus externe contenant. Pour plus d'informations, consultez References to Declared Elements.

  • Consommation de mémoire. Comme pour tous les types de données composites, vous ne pouvez pas calculer de façon fiable la consommation totale de mémoire d’une structure en additionnant les allocations de stockage nominales de ses membres. En outre, vous ne pouvez pas supposer de façon sûre que l’ordre de stockage en mémoire est le même que votre ordre de déclaration. Si vous avez besoin de contrôler la disposition de stockage d’une structure, vous pouvez appliquer l’attribut StructLayoutAttribute à l’instruction Structure.

Exemple

L’exemple suivant utilise l’instruction Structure pour définir un ensemble de données associées pour un employé. Il montre l’utilisation de Public, de Friend et des membres Private pour refléter la sensibilité des éléments de données. Il affiche également les membres de procédure, de propriété et d’événement.

Public Structure employee
    ' Public members, accessible from throughout declaration region.
    Public firstName As String
    Public middleName As String
    Public lastName As String
    ' Friend members, accessible from anywhere within the same assembly.
    Friend employeeNumber As Integer
    Friend workPhone As Long
    ' Private members, accessible only from within the structure itself.
    Private homePhone As Long
    Private level As Integer
    Private salary As Double
    Private bonus As Double
    ' Procedure member, which can access structure's private members.
    Friend Sub CalculateBonus(ByVal rate As Single)
        bonus = salary * CDbl(rate)
    End Sub
    ' Property member to return employee's eligibility.
    Friend ReadOnly Property Eligible() As Boolean
        Get
            Return level >= 25
        End Get
    End Property
    ' Event member, raised when business phone number has changed.
    Public Event ChangedWorkPhone(ByVal newPhone As Long)
End Structure

Pour plus d’informations sur l’utilisation de Structures, consultez variable de structure.

Voir aussi