Programmation .Net - Indépendance financière

Les propriétés des classes en Visual Basic/C#

Les propriétés définissent la classe en tant que telle, on peut les voir comme des méthodes d’accès à des variables internes. Elles comportent deux mots-clés très important à retenir :

1. Get -> permet d’effectuer la lecture de la valeur.
2. Set -> permet d’assigner une valeur.

Nous avons déjà vus la façon courte et la façon longue de créer des propriétés, ce tutoriel ira un peu plus dans le détail de la version longue.

Nouvelle classe

Définissons une nouvelle classe comportant trois propriétés comme suit.

Visual Basic

Public Class Mouse
    Public Property Color As String
    Public Property NumberOfButtons As Integer
    Public Property HasLEDs As Boolean

    Public Sub New()
        Color = "Black"
        NumberOfButtons = 3
        HasLEDs = True
    End Sub
End Class

C#

using System;

namespace PropertiesCSharp
{
    public class Mouse
    {
        public string Color { get; set; }
        public int NumberOfButtons { get; set; }
        public Boolean HasLEDs { get; set; }

        public Mouse(string Color, int NumberOfButtons, Boolean HasLEDs)
        {
            this.Color = Color;
            this.NumberOfButtons = NumberOfButtons;
            this.HasLEDs = HasLEDs;
        }
    }
}

Dans le cas ci-dessus, toutes nos propriétés sont public, donc accessibles de l’extérieur pour lecture et écriture. Parfois ce ne sera pas le comportement désiré, c’est-à-dire que certaines valeurs ne doivent pas être exposées aux erreurs possibles des utilisateurs, nous allons donc utiliser le mot-clé private pour en limiter l’accès.

Private!

Disons que nous souhaitons que l’accès à NumberOfButtons et HasLEDs soit restreint, nous devrons alors changer un peu le format des propriétés, voici un exemple :

Visual Basic

Option Explicit On
Option Strict On

Public Class Mouse
    Private _NumberOfButtons As Integer
    Private _HasLEDs As Boolean

    Public Property Color As String
    Public Property NumberOfButtons As Integer
        Get
            Return _NumberOfButtons
        End Get
        Private Set(ByVal value As Integer)
            _NumberOfButtons = value
        End Set
    End Property
    Public Property HasLEDs As Boolean
        Get
            Return _HasLEDs
        End Get
        Private Set(ByVal value As Boolean)
            _HasLEDs = value
        End Set
    End Property

    Public Sub New()
        Color = "Black"
        NumberOfButtons = 3
        HasLEDs = True
    End Sub
End Class

C#

using System;

namespace PropertiesCSharp
{
    public class Mouse
    {
        private int _NumberOfButtons;
        private bool _HasLEDs;

        public string Color { get; set; }
        public int NumberOfButtons
        {
            get
            {
                return _NumberOfButtons;
            }
            private set
            {
                _NumberOfButtons = value;
            }
        }
        public bool HasLEDs
        {
            get
            {
                return _HasLEDs;
            }
            private set
            {
                _HasLEDs = value;
            }
        }

        public Mouse(string Color, int NumberOfButtons, Boolean HasLEDs)
        {
            this.Color = Color;
            this.NumberOfButtons = NumberOfButtons;
            this.HasLEDs = HasLEDs;
        }
    }
}

Remarquez que les deux propriétés mentionnées plus haut sont maintenant en version longue et que le Set est actuellement privé (private). Vous pouvez essayer d’accéder à ces valeurs en écriture en déclarant un nouvel objet mais vous verrez que cela ne sera pas possible. Le compilateur vous donnera une erreur avant même l’exécution. Il est recommandé de toujours utiliser les propriétés même à l’intérieur de la classe car vous pouvez y mettre de la validation pour vous assurer par exemple qu’une variable privée n’est pas modifiée de façon à rendre la classe invalide (pouvant causer des erreurs à son exécution).

Note: gardez en tête que le mot-clé private permet de restreindre non seulement l’accès aux propriétés mais aussi aux constructeurs et aux méthodes! Nous verrons aussi le mot-clé protected plus tard qui ressemble un peu à private.

Visual Basic

Private Property

C#

C Sharp Property Access

Comme vous pouvez le constater, il nous est maintenant impossible d’assigner quoi que ce soit à NumberOfButtons et à HasLEDs puisqu’elles sont private!

Qu’est-ce que le mot-clé “value” dans la version longue?

Le mot-clé value contient ce qui sera assigné par l’utilisateur à la propriété lors d’un Set. On constate une déclaration plus explicite en Visual Basic qu’en C# sur ce point. Voici un exemple au débogage.

Visual Basic

Property value statement

C#

C Sharp property value

L’image ci-dessus montre l’assignation de la valeur 3 à value lors de l’exécution du constructeur.

Note: en Java, les propriétés sont en fait des méthodes ayant le préfixe get ou set par convention. Les propriétés en Visual Basic et C# sont simplement conçues de manière différentes et, selon moi, plus intuitives.

Pourquoi utiliser la version longue plutôt que la version courte?

Si votre but est seulement de mettre une Propriété accessible de l’extérieur, la version courte fait amplement le travail, toutefois il y a des situations où, par exemple, les propriétés ne sont pas nécessairement des variables mais plutôt des interprétations (ou calculs) en temps réel. Voici un exemple d’un tel cas :

Visual Basic

    Public ReadOnly Property LightsAreOn As Boolean
        Get
            If HasLEDs Then
                Return True
            Else
                Return False
            End If
        End Get
    End Property

C#

        public bool LightsAreOn
        {
            get
            {
                if (_HasLEDs)
                    return true;
                return false;
            }
        }

La propriété n’est donc pas liée à une variable en particulier, mais agît plutôt comme entité logique servant à rapidement fournir une valeur à l’usagé. En effet, celui-ci peut inférer que probablement la souris est allumée si elle a des LEDs, toutefois il est peut-être nécessaire de faire d’autres vérifications pour en venir à cette conclusion. En tout les cas, l’usager peut maintenant savoir, sans ce casser la tête, si les lumières de la souris sont allumées ou non. On pourrait appeler ça une propriété de courtoisie faisant des vérifications pour l’utilisateur.

Remarquez qu’en Visual Basic, la propriété sera ReadOnly car seul le Get est présent, si, d’autre part, seul le Set est présent alors on aura WriteOnly.

Accès aux propriétés de l’extérieur

Créons un vrai objet de la classe que nous venons d’écrire.

Visual Basic

New Mouse example class

C#

Mouse usage class

Vous pouvez facilement avoir accès à n’importe quelle propriété simplement en écrivant NomDeLaVariable.Propriete et l’assigner avec NomDeLaVariable.Propriete = ValeurAAssigner.

Conclusion

Voyons les propriétés comme des techniques de contrôle d’accès à des variables internes de la classe ou encore pour effectuer des calculs pour l’utilisateur. Reste que les propriétés elles-mêmes définissent la classe et peuvent être déclarer en version courte ou longue selon ce que vous souhaitez en faire comme utilisation.

Rappelez-vous que la meilleure façon d’explorer un sujet comme celui-ci est d’expérimenter avec les breakpoints et le mode débogage. Créez vos propres classes, propriétés, méthodes et constructeurs représentant des objets de la vie réelle pour vous pratiquer!

Dans le prochain tutoriel, nous explorerons les méthodes et je donnerai un exercice intéressant sur la matière complète des classes plus tard!

Visual Basic

C#

Next article Les méthodes des classes en Visual Basic/C#
Previous article Comment utiliser les constructeurs en C#/Visual Basic

Related posts

0 Comments

No Comments Yet!

You can be first to comment this post!

Leave a Comment

Your data will be safe! Your e-mail address will not be published. Also other data will not be shared with third person. Required fields marked as *