E2170 Impossible de redéfinir une méthode non virtuelle (Delphi)

De RAD Studio
Aller à : navigation, rechercher

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

Vous avez essayé, dans une classe dérivée, de redéfinir une méthode de base qui n'était pas déclarée en type virtual.


program Produce;

  type
    Base = class
      procedure StaticMethod;
    end;

    Derived = class (Base)
      procedure StaticMethod; override;
    end;

    procedure Base.StaticMethod;
    begin
    end;

    procedure Derived.StaticMethod;
    begin
    end;

begin
end.

L'exemple ci-dessus provoque une erreur car Base.StaticMethod n'est pas déclarée en méthode virtual, et il est ainsi impossible de redéfinir sa déclaration.


program Solve;

  type
    Base = class
      procedure StaticMethod;
    end;

    Derived = class (Base)
      procedure StaticMethod;
    end;

    procedure Base.StaticMethod;
    begin
    end;

    procedure Derived.StaticMethod;
    begin
    end;

begin
end.

Le seul moyen pour enlever cette erreur de votre programme, lorsque vous n'avez pas les sources des classes de base, est d'enlever la spécification 'override' de la déclaration de la méthode dérivée. Si vous avez les sources des classes de base, vous pouvez, avec des précautions, changer la méthode de la base et la déclarer en type virtual. Néanmoins, vous devez savoir que cette modification peut considérablement affecter vos programmes.