W1010 La méthode '%s' cache la méthode virtuelle du type de base '%s' (Delphi)

De RAD Studio
Aller à : navigation, rechercher

Remonter à Messages d'erreur et d'avertissement (Delphi)


Vous avez déclaré une méthode qui a le même nom qu'une méthode virtuelle de la classe de base. Votre nouvelle méthode n'est pas une méthode virtuelle, elle cachera l'accès à la méthode de base de même nom.

 program Produce;
 
 type
   Base = class(TObject)
     procedure VirtuMethod; virtual;
     procedure VirtuMethod2; virtual;
     procedure VirtuMethod3; virtual;
   end;
 
   Derived = class(Base)
     procedure VirtuMethod;
     procedure VirtuMethod2;
     procedure VirtuMethod3;
   end;
  
 procedure Base.VirtuMethod;
 begin
 
 end;
  
 procedure Base.VirtuMethod2;
 begin
 
 end;
 
 procedure Base.VirtuMethod3;
 begin
 
 end;
 
 procedure Derived.VirtuMethod;
 begin
 
 end;
  
 procedure Derived.VirtuMethod2;
 begin
 
 end;
 
 procedure Derived.VirtuMethod3;
 begin
 
 end;
 
 begin
 
 end.

Les deux méthodes déclarées dans la définition de Derived cacheront les fonctions virtuelles de même nom déclarées dans la classe de base.

Il y a trois façons de résoudre cet avertissement.

  1. Vous pouvez spécifier une redéfinition pour que la procédure de la classe dérivée soit aussi virtuelle, si la méthode respective de l'ancêtre est déclarée comme virtuelle ou dynamique, et permettre ainsi aux appels hérités de toujours référencer la procédure originale.
  2. Vous pouvez changer le nom de la procédure comme elle est déclarée dans la classe dérivée.
    Ces deux méthodes sont présentées dans les extraits de code source ci-dessus.
  3. Vous pouvez ajouter la directive reintroduce à la déclaration de la procédure, pour supprimer l'avertissement pour cette méthode particulière. Le mot clé reintroduce spécifie au compilateur Delphi de cacher la méthode respective et de supprimer l'avertissement, car il est peu probable qu'il redéfinisse une méthode de même nom à partir d'une classe de base qui n'est pas virtuelle ou dynamique.


 program Solve;
  
 type
   Base = class(TObject)
     procedure VirtuMethod; virtual;
     procedure VirtuMethod2; virtual;
     procedure VirtuMethod3; virtual;
   end;
  
   Derived = class(Base)
     procedure VirtuMethod; override;
     procedure Virtu2Method;
     procedure VirtuMethod3; reintroduce;
   end;
  
 procedure Base.VirtuMethod;
 begin
 
 end;
  
 procedure Base.VirtuMethod2;
 begin
 
 end;
 
 procedure Base.VirtuMethod3;
 begin
 
 end;
  
 procedure Derived.VirtuMethod;
 begin
 
 end;
  
 procedure Derived.Virtu2Method;
 begin
 
 end;
 
 procedure Derived.VirtuMethod3;
 begin
 
 end;
  
 begin
 
 end.

Voir aussi