Structure, instruction

Mise à jour : novembre 2007

Déclare le nom d'une structure et introduit la définition des variables, propriétés, événements et procédures contenus dans la structure.

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

Éléments

  • attributelist
    Facultatif. Consultez Liste d'attributs.

  • accessmodifier
    Facultatif. Il peut s'agir de l'une des valeurs suivantes :

    Consultez Niveaux d'accès dans Visual Basic.

  • Shadows
    Facultatif. Consultez Shadows.

  • Partial
    Facultatif. Indique une définition partielle de la structure. Consultez Partial (Visual Basic).

  • name
    Obligatoire. Nom de cette structure. Consultez Noms d'éléments déclarés.

  • Of
    Facultatif. Indique qu'il s'agit d'une structure générique.

  • typelist
    Obligatoire si vous utilisez le mot clé Of. Liste de paramètres de type pour cette structure. Consultez Liste de types.

  • Implements
    Facultatif. Indique que cette structure implémente les membres d'une ou plusieurs interfaces. Consultez Implements, instruction.

  • interfacenames
    Obligatoire si vous utilisez l'instruction Implements. Noms des interfaces que cette structure implémente.

  • datamemberdeclarations
    Obligatoire. Une ou plusieurs instructions Const, Dim, Enum ou Event qui déclarent des données membres de la structure.

  • methodmemberdeclarations
    Facultatif. Zéro ou plusieurs déclarations des procédures Function, Operator, Property ou Sub utilisées comme membres de méthode de la structure.

  • End Structure
    Obligatoire. Met fin à la définition Structure.

Notes

L'instruction Structure définit un type valeur composite que vous pouvez personnaliser. Une structure est une généralisation du type défini par l'utilisateur (UDT, User-Defined Type) des précédentes versions de Visual Basic. Pour plus d'informations, consultez Structures constituées à partir de vos propres types de données.

Les structures prennent en charge un grand nombre de mêmes fonctionnalités comme classes. Par exemple, les structures peuvent avoir des propriétés et des procédures, implémenter des interfaces et posséder des constructeurs paramétrables. Toutefois, des différences importantes existent entre les structures et les classes dans des domaines tels que l'héritage, les déclarations et l'utilisation. De même, les classes sont des types référence et les structures 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.

Les structures disposent par défaut d'un accès Friend (Visual Basic). Vous pouvez régler leurs niveaux d'accès avec les modificateurs d'accès. Pour plus d'informations, consultez Niveaux d'accès dans Visual Basic.

Règles

  • Imbrication. Vous pouvez définir une structure dans une autre. La structure externe est appelée structure conteneur, 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 l'intermédiaire de la structure conteneur. Vous devez plutôt 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 d'une structure ne peut pas être Protected ou Protected Friend, car rien ne peut être hérité d'une structure Toutefois, la structure proprement dite peut être Protected ou Protected Friend.

    Vous devez déclarer au moins une variable non partagée ou un événement non personnalisé et non partagé dans une structure. Vous ne pouvez pas posséder uniquement des constantes, propriétés et procédures, même si certaines sont non partagées.

  • Initialisation. Vous ne pouvez pas initialiser la valeur d'une donnée membre non partagée d'une structure comme élément de sa déclaration. Vous devez soit initialiser une donnée membre au moyen d'un constructeur paramétrable sur la structure, soit assigner une valeur au membre après avoir créé une instance de la structure.

  • Héritage. Une structure ne peut pas hériter d'un type autre que ValueType, d'où héritent toutes les structures. En particulier, une structure ne peut pas hériter d'une autre.

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

  • Implémentation. Si la structure utilise l'Implements, instruction, 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 plus une propriété comme sa propriété par défaut, à l'aide du modificateur Default (Visual Basic). Pour plus d'informations, consultez Propriétés 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 disposent par défaut d'un accès Public (Visual Basic). Notez que si la structure proprement dite a un niveau d'accès plus restreint, cela restreint automatiquement l'accès à ses membres, même si vous modifiez leurs niveaux d'accès à l'aide des modificateurs d'accès.

  • Portée. Une structure est présente dans la portée dans l'ensemble de son espace de noms, sa classe, sa structure ou son module conteneur.

    La portée d'un membre de structure est la structure entière.

  • Durée de vie. Une structure elle-même n'a pas de durée de vie. En revanche, 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 à sa création par une clause New (Visual Basic) Elle se termine lorsque la durée de vie de la variable qui la contient prend fin.

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

    Les membres de structure ont des durées de vie qui varient selon leur méthode et leur lieu de déclaration. Pour plus d'informations, consultez « Durée de vie » dans Class, instruction (Visual Basic).

  • Qualification. Le code à l'extérieur 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 crée 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 conteneur, et ainsi de suite jusqu'à l'élément conteneur le plus externe. Pour plus d'informations, consultez Résolution d'une référence lorsque plusieurs variables ont le même nom.

  • Consommation de mémoire. Comme dans le cas de tous les types de données composites, vous ne pouvez pas calculer en toute sécurité la consommation totale de la mémoire d'une structure en additionnant les allocations de stockage nominal de ses membres. De plus, il est risqué de supposer que l'ordre de stockage dans la mémoire est identique à l'ordre de déclaration. Si vous devez 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 apparentées pour un employé. Il montre l'utilisation des membres Public, Friend et Private pour refléter la sensibilité des éléments de données. Il montre également les membres d'une procédure, d'une propriété et d'un é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

Voir aussi

Tâches

Comment : convertir un type défini par l'utilisateur en structure Visual Basic

Concepts

Structures et classes

Recommandations de mise à niveau : éviter les tableaux et les chaînes de longueur fixe dans les types définis par l'utilisateur

Référence

Class, instruction (Visual Basic)

Interface, instruction (Visual Basic)

Module, instruction

Dim, instruction (Visual Basic)

Const, instruction (Visual Basic)

Enum, instruction (Visual Basic)

Event, instruction

Operator, instruction

Property, instruction