2008-10-03 6 views
8

¿Cómo impido que una función/procedimiento en una superclase se anule en una subclase en Delphi (2007)?Detener una función de haber sido anulado en Delphi

Quiero marcarlo para que no se pueda alterar, creo que hay una palabra clave final pero no puedo encontrar la documentación para la vida, así que no estoy 100% seguro de que eso es lo que necesito.

Respuesta

16

La palabra clave es final como usted pensaba. Ver http://dn.codegear.com/article/34324 y http://blogs.teamb.com/rudyvelthuis/2005/05/13/4311. También puede marcar su clase como sellada para evitar que alguien herede de ella. Necesita una versión Delphi superior a 7.

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

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

Tiene razón, es "definitiva". Este fragmento lo muestra. (De uno de los libros Marco Cantu 's)

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

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

Compilación da:

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

Una cosa que me sorprendió: Esta función se admite en Win32 Delphi, no sólo Delphi para .NET

Cuestiones relacionadas