Ajout de propriétés à une classe

Mise à jour : novembre 2007

Dans cette leçon, vous apprendrez comment ajouter des propriétés à la classe que vous avez créée dans la leçon précédente.

Dans une leçon antérieure, Présentation détaillée : description des propriétés, des méthodes et des événements, vous avez appris que tous les objets ont des attributs, et que les propriétés représentent des attributs. Dans la leçon précédente, vous avez créé une classe Persons qui représente une personne ; les gens ont des attributs tels que leur nom et leur âge, la classe Persons a donc besoin de propriétés pour représenter ces attributs.

Les propriétés peuvent être ajoutées à une classe de deux manières : en tant que champ ou en tant que procédure de propriété. Vous pouvez également déterminer comment une propriété fonctionne en utilisant ses modificateurs Public, ReadOnly et WriteOnly.

Champs et procédures de propriété

Les champs ne sont en réalité que des variables publiques au sein d'une classe qui peuvent être définies ou lues depuis l'extérieur de celle-ci. Les champs sont utiles aux propriétés qui ne doivent pas être validées ; par exemple, une valeur Boolean (True ou False). Dans le cas de la classe Persons, vous pouvez disposer d'une propriété Boolean nommée Married, qui spécifie si une personne est célibataire ou mariée. Sachant que seules deux valeurs sont possibles, un champ fonctionne parfaitement pour cette propriété.

Pour ajouter un champ à une classe, le code utilisé présenterait un aspect similaire à ce qui suit.

Public Married As Boolean

Toutefois, la plupart des propriétés sont plus complexes ; dans la plupart des cas, vous utiliserez une procédure de propriété pour ajouter une propriété à une classe. Les procédures de propriété présentent trois parties : une déclaration d'une variable privée pour stocker la valeur de propriété, une procédure Get qui expose la valeur, et une procédure Set qui définit la valeur.

Par exemple, une procédure de propriété destinée à une propriété Name pour la classe Persons présenterait l'aspect suivant :

Private nameValue As String
Public Property Name() As String
    Get
        Name = nameValue
    End Get
    Set(ByVal value As String)
        nameValue = value
    End Set
End Property

La première ligne de code déclare une variable String privée, nameValue, qui enregistre la valeur de la propriété. La procédure de propriété proprement dite commence par Public Property et finit par End Property.

La procédure Get contient le code qui s'exécute lorsque vous souhaitez lire sa valeur ; par exemple, si vous lisez la propriété Persons.Name, le code renverra la valeur enregistrée dans la variable nameValue.

La procédure Set contient un code utilisé pour affecter une nouvelle valeur à la variable nameValue, à l'aide d'une valeur qui lui a été passée en tant qu'argument value. Par exemple, si vous écriviez le code Persons.Name = "John", la valeur de type StringJohn serait passée en tant qu'argument value ; le code présent dans la procédure Set l'affecterait alors à la variable NameValue pour l'enregistrer.

Vous pouvez vous demander pourquoi se compliquer la tâche alors que vous pouvez utiliser un champ pour représenter la propriété Name. Le monde réel impose certaines règles pour les noms ; par exemple, les noms ne contiennent généralement pas de nombres. Vous pourriez ajouter un code à la procédure Set pour vérifier l'argument value et pour retourner une erreur si celui-ci contenait des nombres.

Dans la procédure suivante, vous ajouterez un champ et trois propriétés à la classe Persons.

Essayez !

Pour ajouter des propriétés à votre classe

  1. Ouvrez le projet Persons que vous avez créé dans la leçon précédente. Si vous ne l'aviez pas enregistré, vous devez d'abord revenir à la leçon précédente, Modélisation d'un objet réel : création de votre première classe, et réaliser les procédures qui s'y trouvent.

  2. Dans l'Explorateur de solutions, sélectionnez Persons.vb, puis dans le menu Affichage, choisissez Code.

  3. Ajoutez le code de déclaration suivant sous la ligne Public Class Persons.

    Private firstNameValue As String
    Private middleNameValue As String
    Private lastNameValue As String
    Public Married As Boolean
    
  4. Ajoutez les procédures de propriété suivantes sous le code de déclaration.

    Public Property FirstName() As String
        Get
            FirstName = firstNameValue
        End Get
        Set(ByVal value As String)
            firstNameValue = value
        End Set
    End Property
    
    Public Property MiddleName() As String
        Get
            MiddleName = middleNameValue
        End Get
        Set(ByVal value As String)
            middleNameValue = value
        End Set
    End Property
    
    Public Property LastName() As String
        Get
            LastName = lastNameValue
        End Get
        Set(ByVal value As String)
            lastNameValue = value
        End Set
    End Property
    
  5. Dans le menu Fichier, choisissez Enregistrer tout pour enregistrer votre travail.

Propriétés en lecture seule et en écriture seule

Parfois une propriété doit être définie une fois pour toutes et ne jamais être modifiée pendant l'exécution de votre programme. Par exemple, une propriété qui représente le numéro d'un d'employé ne doit jamais changer ; aussi pourra-t-elle être lue par un autre programme, sans que ce dernier puisse modifier sa valeur.

Le mot clé ReadOnly est utilisé pour spécifier qu'une valeur de propriété peut être lue, mais ne peut pas être modifiée. Si vous essayez d'affecter une valeur à une propriété ReadOnly, une erreur se produit dans l'Éditeur de code.

Pour créer une propriété en lecture seule, vous créez une procédure de propriété avec une procédure Get, mais aucune procédure Set, comme illustré ci-dessous.

Private IDValue As Integer
ReadOnly Property ID() As Integer
    Get
        ID = IDValue
    End Get
End Property

De la même manière, le mot clé WriteOnly autorise la définition d'une valeur de propriété, mais non sa lecture ; par exemple, vous n'autorisez pas la lecture d'une propriété de mot de passe par d'autres programmes. Vous pouvez manipuler cette valeur au sein de votre classe, mais vous souhaitez qu'elle reste privée.

Pour créer une propriété en écriture seule, vous créez une propriété avec une procédure Set, mais aucune procédure Get, comme illustré ci-dessous.

Private passwordValue As String
WriteOnly Property Password() As String
    Set(ByVal value As String)
        passwordValue = value
    End Set
End Property

Les procédures de propriété ReadOnly et WriteOnly se révèlent également utiles lorsque vous souhaitez prendre une valeur de propriété et une seule, et la convertir en une valeur différente. Par exemple, l'âge d'une personne : contrairement à votre nom, votre âge évolue dans le temps. Donc si vous avez affecté votre âge à une classe et l'avez lu un an plus tard, la valeur lue est fausse.

Dans la classe Persons, vous pouvez empêcher cette situation en ajoutant deux propriétés ; une propriété WriteOnlyBirthYear qui représente l'année de votre naissance, qui ne change jamais, et une propriété ReadOnlyAge qui retourne une valeur en calculant la différence entre l'année actuelle et votre année de naissance.

Essayez !

Pour ajouter des propriétés ReadOnly et WriteOnly à votre classe

  1. Ajoutez le code de déclaration suivant sous les autres déclarations présentes au début du module de classe.

    Private birthYearValue As Integer
    
  2. Ajoutez les procédures de propriété suivantes sous le code de déclaration.

    WriteOnly Property BirthYear() As Integer
        Set(ByVal value As Integer)
            birthYearValue = value
        End Set
    End Property
    
    ReadOnly Property Age() As String
        Get
            Age = My.Computer.Clock.LocalTime.Year - birthYearValue
        End Get
    End Property
    
  3. Dans le menu Fichier, choisissez Enregistrer tout pour enregistrer votre travail.

Étapes suivantes

Dans cette leçon, vous avez appris ce que sont les propriétés et les différentes manières de les ajouter à votre classe. Dans la leçon suivante, vous apprendrez comment ajouter des méthodes à votre classe afin que celle-ci puisse exécuter des actions.

Leçon suivante : Ajout de méthodes à une classe

Voir aussi

Tâches

Modélisation d'un objet réel : création de votre première classe

Concepts

Procédures Property et champs

Autres ressources

Programmation avec des objets : utilisation de classes