Notice: This page requires JavaScript to function properly.
Please enable JavaScript in your browser settings or update your browser.
Apprendre Modificateurs d'Accès Courants | Principes Essentiels de la POO
C# Au-Delà des Bases

bookModificateurs d'Accès Courants

Vous connaissez peut-être déjà le mot-clé public. Il s'agit d'un modificateur d'accès qui définit où une classe, une méthode ou un champ peut être accessible.

De même, il existe des termes comme private et protected. Ces deux termes peuvent être utilisés pour spécifier l'accessibilité d'une méthode ou d'un champ.

Lorsque vous écrivez public devant une classe, cela rend simplement la classe accessible depuis différentes parties (fichiers) du programme. Il n'est pas nécessaire d'explorer cet aspect en détail car il dépasse le cadre de ce chapitre.

Lorsque vous spécifiez une méthode ou un champ comme public, vous rendez essentiellement cette propriété de la classe accessible depuis n'importe où dans le code via un objet :

index.cs

index.cs

copy
1234567891011121314151617181920212223
using System; public class Point { public int x; public int y; public Point(int x, int y) { this.x = x; this.y = y; } } class ConsoleApp { static void Main() { Point p = new Point(7, 9); // We can directly access 'public' fields of an object using the dot '.' symbol Console.WriteLine(p.x); Console.WriteLine(p.y); } }

Si vous ne souhaitez pas qu'un champ ou une méthode d'un objet soit accessible en dehors de la classe, il suffit de le rendre private :

index.cs

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
using System; class Point { public int x; public int y; private double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } // A private method can only be used inside the class. // Trying to use a private method outside the class might result in a compilation error. private double calculateMagnitude() { // Math.Sqrt() is the square root function. return Math.Sqrt(x * x + y * y); } // Sometimes, to be able to access data from a private field, we make public methods // which specifically retrieve the value of that field. Such methods are called "getters", // and such fields are called "read-only" fields as we can access their data but cannot modify it from outside the class. public double getMagnitude() { return magnitude; } } class ConsoleApp { static void Main() { Point p = new Point(7, 9); // Correct Console.WriteLine(p.getMagnitude()); // Error Console.WriteLine(p.calculateMagnitude()); // Error Console.WriteLine(p.magnitude); } }

Il est important de noter que les champs et méthodes privés ne sont pas hérités par les classes dérivées :

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
using System; class Point { public int x; public int y; private double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } private double calculateMagnitude() { // Math.Sqrt() is the square root function. return Math.Sqrt(x * x + y * y); } public double getMagnitude() { return magnitude; } } class Point3D : Point { public int z; // The 'base(x, y)' part simply calls the constructor of the 'Point' class with 'x' and 'y' values. // This will be more thoroughly explained in the later section. public Point3D(int x, int y, int z) : base(x, y) { this.z = z; // Error calculateMagnitude(); } } class ConsoleApp { static void Main() { Point3D p = new Point3D(5, 7, 9); // Correct according to rules of language, however note that it will give the magnitude of x and y excluding z (for a 2D point) so logically the result will be wrong Console.WriteLine(p.getMagnitude()); } }

Pour rendre un champ ou une méthode inaccessible depuis l'extérieur de la classe mais accessible depuis les classes dérivées, vous pouvez utiliser le mot-clé protected :

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
using System; class Point { public int x; public int y; protected double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } protected double calculateMagnitude() { // Math.Sqrt() is the squareroot function. return Math.Sqrt(x * x + y * y); } public double getMagnitude() { return magnitude; } } class Point3D : Point { public int z; public Point3D(int x, int y, int z) : base(x, y) { this.z = z; // No Error Now calculateMagnitude(); } } class ConsoleApp { static void Main() { Point3D p = new Point3D(5, 7, 9); Console.WriteLine(p.getMagnitude()); } }

Parfois, pour pouvoir accéder à des attributs privés d'une classe, on crée des méthodes publiques appelées getters. La méthode getMagnitude est un exemple de getter. Cela garantit que le champ est uniquement lisible et non modifiable, rendant cet attribut en lecture seule.

Note
Remarque

Si aucun modificateur d'accès n'est spécifié pour un membre de classe, il est supposé être private par défaut.

1. Quel modificateur d'accès permet à un membre d'être accessible uniquement au sein de sa classe de définition ?

2. Comment rendre un attribut de classe inaccessible depuis l'extérieur ?

3. Quelle est une bonne méthode pour accéder aux valeurs des champs privés depuis l'extérieur de la classe ?

question mark

Quel modificateur d'accès permet à un membre d'être accessible uniquement au sein de sa classe de définition ?

Select the correct answer

question mark

Comment rendre un attribut de classe inaccessible depuis l'extérieur ?

Select the correct answer

question mark

Quelle est une bonne méthode pour accéder aux valeurs des champs privés depuis l'extérieur de la classe ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 3

Demandez à l'IA

expand

Demandez à l'IA

ChatGPT

Posez n'importe quelle question ou essayez l'une des questions suggérées pour commencer notre discussion

Suggested prompts:

Can you explain the difference between public, private, and protected with examples?

Why would I use getters instead of making a field public?

Are there any best practices for choosing between these access modifiers?

Awesome!

Completion rate improved to 2.04

bookModificateurs d'Accès Courants

Glissez pour afficher le menu

Vous connaissez peut-être déjà le mot-clé public. Il s'agit d'un modificateur d'accès qui définit où une classe, une méthode ou un champ peut être accessible.

De même, il existe des termes comme private et protected. Ces deux termes peuvent être utilisés pour spécifier l'accessibilité d'une méthode ou d'un champ.

Lorsque vous écrivez public devant une classe, cela rend simplement la classe accessible depuis différentes parties (fichiers) du programme. Il n'est pas nécessaire d'explorer cet aspect en détail car il dépasse le cadre de ce chapitre.

Lorsque vous spécifiez une méthode ou un champ comme public, vous rendez essentiellement cette propriété de la classe accessible depuis n'importe où dans le code via un objet :

index.cs

index.cs

copy
1234567891011121314151617181920212223
using System; public class Point { public int x; public int y; public Point(int x, int y) { this.x = x; this.y = y; } } class ConsoleApp { static void Main() { Point p = new Point(7, 9); // We can directly access 'public' fields of an object using the dot '.' symbol Console.WriteLine(p.x); Console.WriteLine(p.y); } }

Si vous ne souhaitez pas qu'un champ ou une méthode d'un objet soit accessible en dehors de la classe, il suffit de le rendre private :

index.cs

index.cs

copy
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
using System; class Point { public int x; public int y; private double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } // A private method can only be used inside the class. // Trying to use a private method outside the class might result in a compilation error. private double calculateMagnitude() { // Math.Sqrt() is the square root function. return Math.Sqrt(x * x + y * y); } // Sometimes, to be able to access data from a private field, we make public methods // which specifically retrieve the value of that field. Such methods are called "getters", // and such fields are called "read-only" fields as we can access their data but cannot modify it from outside the class. public double getMagnitude() { return magnitude; } } class ConsoleApp { static void Main() { Point p = new Point(7, 9); // Correct Console.WriteLine(p.getMagnitude()); // Error Console.WriteLine(p.calculateMagnitude()); // Error Console.WriteLine(p.magnitude); } }

Il est important de noter que les champs et méthodes privés ne sont pas hérités par les classes dérivées :

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253
using System; class Point { public int x; public int y; private double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } private double calculateMagnitude() { // Math.Sqrt() is the square root function. return Math.Sqrt(x * x + y * y); } public double getMagnitude() { return magnitude; } } class Point3D : Point { public int z; // The 'base(x, y)' part simply calls the constructor of the 'Point' class with 'x' and 'y' values. // This will be more thoroughly explained in the later section. public Point3D(int x, int y, int z) : base(x, y) { this.z = z; // Error calculateMagnitude(); } } class ConsoleApp { static void Main() { Point3D p = new Point3D(5, 7, 9); // Correct according to rules of language, however note that it will give the magnitude of x and y excluding z (for a 2D point) so logically the result will be wrong Console.WriteLine(p.getMagnitude()); } }

Pour rendre un champ ou une méthode inaccessible depuis l'extérieur de la classe mais accessible depuis les classes dérivées, vous pouvez utiliser le mot-clé protected :

index.cs

index.cs

copy
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950
using System; class Point { public int x; public int y; protected double magnitude; public Point(int x, int y) { this.x = x; this.y = y; this.magnitude = calculateMagnitude(); } protected double calculateMagnitude() { // Math.Sqrt() is the squareroot function. return Math.Sqrt(x * x + y * y); } public double getMagnitude() { return magnitude; } } class Point3D : Point { public int z; public Point3D(int x, int y, int z) : base(x, y) { this.z = z; // No Error Now calculateMagnitude(); } } class ConsoleApp { static void Main() { Point3D p = new Point3D(5, 7, 9); Console.WriteLine(p.getMagnitude()); } }

Parfois, pour pouvoir accéder à des attributs privés d'une classe, on crée des méthodes publiques appelées getters. La méthode getMagnitude est un exemple de getter. Cela garantit que le champ est uniquement lisible et non modifiable, rendant cet attribut en lecture seule.

Note
Remarque

Si aucun modificateur d'accès n'est spécifié pour un membre de classe, il est supposé être private par défaut.

1. Quel modificateur d'accès permet à un membre d'être accessible uniquement au sein de sa classe de définition ?

2. Comment rendre un attribut de classe inaccessible depuis l'extérieur ?

3. Quelle est une bonne méthode pour accéder aux valeurs des champs privés depuis l'extérieur de la classe ?

question mark

Quel modificateur d'accès permet à un membre d'être accessible uniquement au sein de sa classe de définition ?

Select the correct answer

question mark

Comment rendre un attribut de classe inaccessible depuis l'extérieur ?

Select the correct answer

question mark

Quelle est une bonne méthode pour accéder aux valeurs des champs privés depuis l'extérieur de la classe ?

Select the correct answer

Tout était clair ?

Comment pouvons-nous l'améliorer ?

Merci pour vos commentaires !

Section 4. Chapitre 3
some-alt