Sign in Join
Wiki copytemporary

Property/fr: what changed

Revision 0 to 1. Removed lines have a minus sign; added lines have a plus sign.

Title: Property/fr

OldNewLine
1+Retour aux [[Reserved words/fr|mots réservés]].
2+
3+## Documentation
4+
5+Documentation officielle FPC: [1](http://www.freepascal.org/docs-html/ref/refse24.html)
6+
7+## Description
8+
9+Le mot réservé **property** fait partie de la programmation orientée objet. Il permet plusieurs niveaux d'accès (read, read/write etc) depuis l'extérieur à des variables dans la classe.
10+
11+## Example
12+
13+``` pascal
14+type
15+ TCar = class
16+ private
17+ FColor: string;
18+ FBuildYear: integer;
19+ procedure SetColor(CarColor: string);
20+ public
21+ property Color: string read FColor write SetColor; //Lit directement la variable FColor
22+ // écrit à travers la procédure SetColor qui change la variable FColor.
23+ // Une autre option est de faire simplement "write FColor" pour changer directement
24+ // la variable FColor...
25+ end;
26+
27+procedure TCar.SetColor(CarColor: string);
28+begin
29+ //Nous pouvons faire d'autres choses ici, telles que le ménage, des notification de changement,
30+ // validition d'autres variables, logging, etc.
31+ //validating against other variables, logging, etc -e.g.
32+ if CarColor='Pink' then
33+ ShowMessage('Note: le rose n''est pas une couleur courante pour une voiture.');
34+ FColor:=CarColor;
35+end;
36+
37+procedure PropertyExample(); //Montre comment affecter des propriétés et les lires
38+var
39+ MyCar: TCar; // Une intance de TCar; utilisée dans l'exemple
40+begin
41+ MyCar := TCar.Create; // Crée l'objet,
42+ try
43+ MyCar.Color:='Green'; // Définit la propriété Color... qui appelle la procédure setcolor ... qui affecte la variable FColor.
44+ showmessage(MyCar.Color); // Lit maintenant la propriété Color... doit montrer 'Green'
45+ finally
46+ MyCar.Free; // Libère la mémoire de l'objet, même si une erreur s'est produite
47+ end;
48+end;
49+```
50+
51+## Objets en propriétés
52+
53+Vous pouvez affecter des objets en propriétés, par exemple :
54+
55+``` pascal
56+type
57+ TEngine = class
58+ ...
59+ TCar = class
60+ private
61+ FMyEngine: TEngine;
62+ public
63+ property Engine: TEngine read FMyEngine;
64+ implementation
65+ //...
66+ // Code dans TCar qui crée et libère FMyEngine comme voulu
67+ // (i.e. dans le constructeur et le destructeur)
68+ // ...
69+```
70+
71+L'accès en lecture peut ne pas sembler évident à première vue. Le code client (extérieur à la classe) dispose seulement d'un accès en lecture seule à la référence de l'objet TEngine en question, ce qui signifie que l'on ne peut pas créer ou réaffecter l'objet. C'est la référence de l'objet qui est protégée. L'objet peut être modifié à travers ses propres propriétés et méthodes.
72+
73+**Attention** : l'appel à Free aussi reste possible, ce qui peut amener des bugs difficiles à résoudre, le développeur de la partie cliente doit donc respecter ce choix de conception et ne pas invoquer Free sur l'objet en propriété.
74+
75+Si vous voulez donner la responsabilité au code appelant de créer et détruire l'objet, vous pouvez aussi définir l'accès en écriture, par exemple:
76+
77+``` pascal
78+...
79+ public
80+ property Engine: TEngine read FMyEngine write FMyEngine;
81+...
82+```
83+
84+---
85+*From the Free Pascal wiki, page "Property/fr", as it stood on 2020-02-23 after a change by Trev, out of the wiki's dump of 2024-05-26. Copyright stays with the author who wrote it, according to the old wiki's [[Licensing]] page. If you have concerns about this material, [message the admin](/wiki-contact).*

Back to history