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