Une propriété permet de lire (get) ou de fixer (set) la valeur d'un attribut. Une propriété est déclarée comme suit :
public Type Propriété{
get {...}
set {...}
}
où Type doit être le type de l'attribut géré par la propriété. Elle peut avoir deux méthodes appelées get et set. La méthode get est
habituellement chargée de rendre la valeur de l'attribut qu'elle gère (elle pourrait rendre autre chose, rien ne l'empêche). La méthode
set reçoit un paramètre appelé value qu'elle affecte normalement à l'attribut qu'elle gère. Elle peut en profiter pour faire des
vérifications sur la validité de la valeur reçue et éventuellement lancer un exception si la valeur se révèle invalide. C'est ce qui est fait
ici.
Comment ces méthodes get et set sont-elles appelées ? Considérons le programme de test suivant :
1. using System;
2.
3. namespace Chap2 {
4. class Program {
5. static void Main(string[] args) {
6. Personne p = new Personne("Jean", "Michelin", 34);
7. Console.Out.WriteLine("p=(" + p.Prenom + "," + p.Nom + "," + p.Age + ")");
8. p.Age = 56;
9. Console.Out.WriteLine("p=(" + p.Prenom + "," + p.Nom + "," + p.Age + ")");
10. try {
11. p.Age = -4;
12. } catch (Exception ex) {
13. Console.Error.WriteLine(ex.Message);
14. }//try-catch
15. }
16. }
17. }
Dans l'instruction
Console.Out.WriteLine("p=(" + p.Prenom + "," + p.Nom + "," + p.Age + ")");
on cherche à avoir les valeurs des propriétés Prenom, Nom et Age de la personne p. C'est la méthode get de ces propriétés qui est
alors appelée et qui rend la valeur de l'attribut qu'elles gèrent.
Dans l'instruction
p.Age=56;
on veut fixer la valeur de la propriété Age. C'est alors la méthode set de cette propriété qui est alors appelée. Elle recevra 56 dans
son paramètre value.
Une propriété P d'une classe C qui ne définirait que la méthode get est dite en lecture seule. Si c est un objet de classe C,
l'opération c.P=valeur sera alors refusée par le compilateur.
L'exécution du programme de test précédent donne les résultats suivants :
1. p=(Jean,Michelin,34)
2. p=(Jean,Michelin,56)
3. âge (-4) invalide
Les propriétés nous permettent donc de manipuler des attributs privés comme s'ils étaient publics. Une autre caractéristique des
propriétés est qu'elles peuvent être utilisées conjointement avec un constructeur selon la syntaxe suivante :
Classe objet=new Classe (...) {Propriété1=val1, Propriété2=val2, ...}
Cette syntaxe est équivalente au code suivant :
1. Classe objet=new Classe(...);
2. objet.Propriété1=val1;
3. objet.Propriété2=val2;
4. ...
L'ordre des propriétés n'importe pas. Voici un e