2008-10-03 5 views
8

Wie kann ich eine Funktion/Prozedur in einer Oberklasse in Delphi (2007) in einer Unterklasse außer Kraft setzen?Das Stoppen einer Funktion wurde in Delphi überschrieben

Ich möchte es so markieren, dass es nicht geändert werden kann, ich glaube, es gibt ein abschließendes Schlüsselwort, aber kann nicht für das Leben von mir die Dokumentation dafür finden, also bin ich nicht 100% sicher, dass ich brauche.

Antwort

16

Das Schlüsselwort ist final, wie Sie dachten. Siehe http://dn.codegear.com/article/34324 und http://blogs.teamb.com/rudyvelthuis/2005/05/13/4311. Sie können Ihre Klasse auch als versiegelt markieren, um zu verhindern, dass jemand davon erbt. Sie benötigen eine Delphi-Version höher als 7.

type 
    TSomeClass = class 
    protected 
    procedure SomeVirtualMethod; virtual; 
    end; 

    TOtherClass = class(TSomeClass) 
    protected 
    procedure SomeVirtualMethod; override; final; 
    end; 
9

Sie haben recht - es ist "endgültig". Dieser Ausschnitt zeigt es. (Von einem der Marco Cantu ‚s Bücher)

type 
    TDeriv1 = class (TBase) 
    procedure A; override; final; 
    end; 

    TDeriv2 = class (TDeriv1) 
    procedure A; override; // error: "cannot override a final method" 
    end; 

compilieren gibt:

[Pascal Error] Unit1.pas(11): E2352 Cannot override a final method 

Eine Sache, die mich überrascht: Diese Funktion ist in Win32 Delphi unterstützt wird, nicht nur Delphi für .NET