Portée et qualificateurs
Remonter à Utilisation du modèle objet - Index
La portée détermine l'accessibilité des champs, propriétés et méthodes d'un objet. Tous les membres déclarés dans une classe sont disponibles pour cette classe et, comme nous le verrons plus loin, souvent pour ses descendants. Même si le code d'implémentation d'une méthode apparaît hors de la déclaration de la classe, la méthode reste dans la portée de la classe car elle est déclarée dans la déclaration de la classe.
Quand vous écrivez du code pour implémenter une méthode qui fait référence aux propriétés, méthodes ou champs de la classe dans laquelle la méthode est déclarée, vous n'avez pas besoin de préfixer ces identificateurs avec le nom de la classe. Si, par exemple, vous placez un bouton dans une nouvelle fiche, vous pouvez écrire le gestionnaire d'événement suivant pour l'événement OnClick du bouton :
procedure TForm1.Button1Click(Sender: TObject); begin Color := clFuchsia; Button1.Color := clLime; end;
La première instruction est équivalente à :
Form1.Color := clFuchsia
Il n'est pas nécessaire de qualifier Color avec Form1 car la méthode Button1Click fait partie de TForm1 ; les identificateurs placés dans la méthode sont alors dans la portée de l'instance de TForm1 dans laquelle la méthode est appelée. Par contre, la deuxième instruction désigne la couleur de l'objet bouton, pas celle de la fiche dans laquelle le gestionnaire d'événement est déclaré, elle doit donc être qualifiée.
L'EDI crée un fichier d'unité (code source) séparé pour chaque fiche. Si vous souhaitez accéder aux composants d'une fiche depuis le fichier d'unité d'une autre fiche, vous devez qualifier les noms de composants de la manière suivante :
Form2.Edit1.Color := clLime;
De la même manière, vous pouvez accéder aux méthodes d'un composant à partir d'une autre fiche. Par exemple,
Form2.Edit1.Clear;
Pour accéder aux composants de Form2 depuis le ficher d'unité de Form1, vous devez également ajouter l'unité de Form2 à la clause uses de l'unité de Form1.
La portée d'une classe s'étend à tous ses descendants. Vous pouvez toutefois redéclarer un champ, une propriété ou une méthode dans une classe dérivée. De telles redéclarations masquent ou surchargent le membre hérité.