E2170 Eine nicht-virtuelle Methode kann nicht überschrieben werden (Delphi)

Aus RAD Studio
Wechseln zu: Navigation, Suche

Nach oben zu Fehler- und Warnungsmeldungen (Delphi) - Index

Sie haben in einer abgeleiteten Klasse versucht, eine Basismethode zu überschreiben, die nicht als einer der virtuellen Typen deklariert war.


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.

In diesem Beispiel wird ein Fehler ausgelöst, weil Base.StaticMethod nicht als virtuelle Methode deklariert wurde und daher eine Überschreibung ihrer Deklaration nicht möglich ist.


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.

Die einzige Möglichkeit, diesen Fehler aus Ihrem Programm zu entfernen, wenn Sie nicht über den Quelltext für die Basisklassen verfügen, ist die Entfernung der override-Festlegung aus der Deklaration der abgeleiteten Methode. Wenn Sie über den Quelltext der Basisklasse verfügen, könnten Sie - nach sorgfältiger Überlegung - die Basismethode ändern und als virtuellen Typ deklarieren. Beachten Sie aber, dass diese Änderung eine drastische Auswirkung auf Ihre Programme haben kann.