[QR]Qu'est-ce que le mot clé Self et comment l'utiliser ?
Schématiquement à la question 
qui suis-je ?, le mot clé 
Self répond 
moi-même en renvoyant la référence de l'instance en cours d'utilisation au sein d'une méthode de sa classe.
Self permet donc de connaître l'instance en cours et dans certains cas de lever toute ambiguité. 
Par exemple ici :
	
	1 2 3 4 5 6
   |  
procedure TObject.Free;
begin
  if Self <> nil then
    Destroy;
end; | 
 on souhaite savoir si l'objet en cours est instancié ou pas (nil) avant d'appeler le destructeur.
Self est aussi une référence sur une classe et peut donc ne pas être affectée (MonObjet:=Nil). Cette méthode étant statique son appel ne pose pas de problème dans ce cas.
Et là :
	
	1 2 3 4
   |  
with TPaintBox(Sender).Canvas.Brush do
  begin
    Color := Self.Color; | 
 il y a une ambiguité du à la présence de la propriété 
color commune à l'instance en cours d'utilisation et à un objet imbriqué (Canvas.Brush).
Self permet ici de savoir exactement de quelle propriété on parle.
Dans le cas d'une méthode de classe l'utilisation de 
Self à une signification différente, il s'agit d'une variable de type référence de classe contenant la classe effective de l'objet. 
Schématiquement dans ce cas  le mot clé 
Self répond à la question 
De quelle classe suis-je ? en répondant 
 De la classe TMaclasse.
			
		
 
	
Partager