Accès aux membres depuis l’extérieur de la classe

Les modificateurs d’accès ne restreignent que le code à l’extérieur de la classe ; il n’existe aucune isolation d’accès à l’intérieur de la classe.

Comme nous l’avons vu précédemment, tous les membres sont accessibles librement depuis l’intérieur d’une classe.

Nous allons maintenant voir comment accéder aux membres depuis l’extérieur de la classe.

Pour accéder aux membres d’instance publics depuis l’extérieur d’une classe, vous devez utiliser la syntaxe pointée nomVariableObjet.NomMembre.

class Program
{
    static void Main(string[] args)
    {
        Worker worker = new Worker(); // Créer un objet
        int hours = worker.GetHours(); // Appel d’une fonction publique via l’objet
        worker.hours = 12; // Affecter une valeur à une variable publique
        Console.WriteLine(worker.hours); // Lecture directe comme une variable simple
    }
}

class Worker
{
    int age;
    private double savings;
    public int hours;

    void ReadSavings()
    {
        Console.WriteLine(savings);
    }

    public int GetHours()
    {
        return hours;
    }
}Langage du code : C# (cs)

La méthode GetHours de Worker est marquée public, elle est donc lisible et modifiable depuis l’extérieur.

La méthode Main de la classe Program instancie un objet Worker nommé worker.

On accède aux membres publics via le nom de l’objet suivi d’un point. Le nom de l’objet agit comme un pointeur qui contient une référence (adresse mémoire) vers les données.

Syntaxe d’accès aux membres d’instance depuis l’extérieur : variableObjet.ChampPublic / MethodePublique().

Les membres private ne peuvent pas être atteints par syntaxe pointée hors de la classe.

Tout tentative d’accès à des membres privés (champs, fonctions) hors de la classe provoque une erreur.

Exemple erroné

class Program
{
    static void Main(string[] args)
    {
        Worker worker = new Worker(); 
        int hours = worker.GetHours(); 
        worker.hours = 12;
        Console.WriteLine(worker.hours);

        worker.ReadSavings();
        worker.age = 20;
        worker.savings = 1000000000.0;
    }
}

class Worker
{
    int age;
    private double savings;
    public int hours;

    void ReadSavings()
    {
        Console.WriteLine(savings);
    }

    public int GetHours()
    {
        return hours;
    }
}Langage du code : C# (cs)

Voici un autre exemple

class Rectangle
{
    // Champs d’instance publics : Longueur Length, Largeur Width
    public int Length, Width;

    // Méthode d’instance : calculer et renvoyer l’aire du rectangle
    public int GetArea()
    {
        return Length * Width;
    }
}

class Program
{
    static void Main()
    {
        // Créer deux instances de rectangle indépendantes
        Rectangle rect1 = new Rectangle();
        Rectangle rect2 = new Rectangle();

        // Affecter les dimensions, les données sont isolées
        rect1.Length = 10; rect1.Width = 5;
        rect2.Length = 8;  rect2.Width = 7;

        // Lire les valeurs et afficher les aires
        Console.WriteLine("Rectangle 1 : Longueur {0}, Largeur {1}, Aire {2}", rect1.Length, rect1.Width, rect1.GetArea());
        Console.WriteLine("Rectangle 2 : Longueur {0}, Largeur {1}, Aire {2}", rect2.Length, rect2.Width, rect2.GetArea());
    }
}Langage du code : C# (cs)

Il s’agit d’une classe Rectangle comportant deux champs publics Length et Width pour stocker les dimensions, ainsi qu’une fonction GetArea qui renvoie l’aire.

Ces éléments sont tous publics.

Résultat de l’exécution

Rectangle 1 : Longueur 10, Largeur 5, Aire 50
Rectangle 2 : Longueur 8, Largeur 7, Aire 56

Voici comment ils sont stockés en mémoire

Les deux objets occupent des emplacements mémoire distincts. Chacun possède ses propres Length et Width sans interférence mutuelle.

Accès aux membres depuis l’extérieur de la classe

Laisser un commentaire

Votre adresse e-mail ne sera pas publiée. Les champs obligatoires sont indiqués avec *