'>

Les méthodes et attributs de classe en C sharp

Supposons qu'on veuille compter le nombre d'objets Personne créées dans une application. On peut soi-même gérer un compteur
mais on risque d'oublier les objets temporaires qui sont créés ici ou là. Il semblerait plus sûr d'inclure dans les constructeurs de la
classe Personne, une instruction incrémentant un compteur. Le problème est de passer une référence de ce compteur afin que le
constructeur puisse l'incrémenter : il faut leur passer un nouveau paramètre. On peut aussi inclure le compteur dans la définition de
la classe. Comme c'est un attribut de la classe elle-même et non celui d'une instance particulière de cette classe, on le déclare
différemment avec le mot clé static :
private static long nbPersonnes;
Pour le référencer, on écrit Personne.nbPersonnes pour montrer que c'est un attribut de la classe Personne elle-même. Ici, nous avons
créé un attribut privé auquel on n'aura pas accès directement en-dehors de la classe. On crée donc une propriété publique pour
donner accès à l'attribut de classe nbPersonnes. Pour rendre la valeur de nbPersonnes la méthode get de cette propriété n'a pas besoin
d'un objet Personne particulier : en effet nbPersonnes est l'attribut de toute une classe. Aussi a-t-on besoin d'une propriété déclarée elle-
aussi static :
1. public static long NbPersonnes {
2. get { return nbPersonnes; }
3. }
qui de l'extérieur sera appelée avec la syntaxe Personne.NbPersonnes. Voici un exemple.
La classe Personne devient la suivante :
1. using System;
2.
3. namespace Chap2 {
4. public class Personne {
5.
6. // attributs de classe
7. private static long nbPersonnes;
8. public static long NbPersonnes {
9. get { return nbPersonnes; }
10. }
11.
12. // attributs d'instance
13. private string prenom;
14. private string nom;
15. private int age;
16.
17. // constructeurs
18. public Personne(String p, String n, int age) {
19. Initialise(p, n, age);
20. nbPersonnes++;
21. }
22. public Personne(Personne p) {
23. Initialise(p);
24. nbPersonnes++;
25. }
26.
27....
28.}

Lignes 20 et 24, les constructeurs incrémentent le champ statique de la ligne 7.
Avec le programme suivant :
1. using System;
2.
3. namespace Chap2 {
4. class Program {
5. static void Main(string[] args) {
6. Personne p1 = new Personne("Jean", "Dupont", 30);
7. Personne p2 = new Personne(p1);
8. new Personne(p1);
9. Console.WriteLine("Nombre de personnes créées : " + Personne.NbPersonnes);
10. }
11. }
12.}
on obtient les résultats suivants :
Nombre de personnes créées : 3

Publié par Drupal french Study