Property/fr
│
Deutsch (de) │
English (en) │
suomi (fi) │
français (fr) │
русский (ru) │
Retour aux mots réservés.
Documentation
Documentation officielle FPC: [1]
Description
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.
Example
type
TCar = class
private
FColor: string;
FBuildYear: integer;
procedure SetColor(CarColor: string);
public
property Color: string read FColor write SetColor; //Lit directement la variable FColor
// écrit à travers la procédure SetColor qui change la variable FColor.
// Une autre option est de faire simplement "write FColor" pour changer directement
// la variable FColor...
end;
procedure TCar.SetColor(CarColor: string);
begin
//Nous pouvons faire d'autres choses ici, telles que le ménage, des notification de changement,
// validition d'autres variables, logging, etc.
//validating against other variables, logging, etc -e.g.
if CarColor='Pink' then
ShowMessage('Note: le rose n''est pas une couleur courante pour une voiture.');
FColor:=CarColor;
end;
procedure PropertyExample(); //Montre comment affecter des propriétés et les lires
var
MyCar: TCar; // Une intance de TCar; utilisée dans l'exemple
begin
MyCar := TCar.Create; // Crée l'objet,
try
MyCar.Color:='Green'; // Définit la propriété Color... qui appelle la procédure setcolor ... qui affecte la variable FColor.
showmessage(MyCar.Color); // Lit maintenant la propriété Color... doit montrer 'Green'
finally
MyCar.Free; // Libère la mémoire de l'objet, même si une erreur s'est produite
end;
end;
Objets en propriétés
Vous pouvez affecter des objets en propriétés, par exemple :
type
TEngine = class
...
TCar = class
private
FMyEngine: TEngine;
public
property Engine: TEngine read FMyEngine;
implementation
//...
// Code dans TCar qui crée et libère FMyEngine comme voulu
// (i.e. dans le constructeur et le destructeur)
// ...
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.
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é.
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:
...
public
property Engine: TEngine read FMyEngine write FMyEngine;
...