2012-09-20 10 views
9

En C# puedo acceder a la clase base por palabra clave base, y en java puedo acceder a ella mediante la palabra clave super. ¿Cómo hacer eso en Delphi? Supongamos que tengo siguiente código:¿Cómo acceder a la base (super) clase en Delphi?

type 
    TForm3 = class(TForm) 
    private 
    procedure _setCaption(Value:String); 
    public 
    property Caption:string write _setCaption; //adding override here gives error 
    end; 

    implementation 


procedure TForm3._setCaption(Value: String); 
begin 
    Self.Caption := Value; //it gives stack overflow  
end; 

Respuesta

12

Usted está consiguiendo una excepción stackoveflow porque la línea

Self.Caption := Value; 

es recursivo.

Puede acceder a la propiedad de los padres Caption fundición de la propiedad Self a la clase base, así:

procedure TForm3._setCaption(const Value: string); 
begin 
    TForm(Self).Caption := Value; 
end; 

o utilizando el inherited palabra clave

procedure TForm3._setCaption(const Value: string); 
begin 
    inherited Caption := Value; 
end; 
10

Debe utilizar inherited palabra clave:

procedure TForm3._setCaption(Value: String); 
begin 
    inherited Caption := Value; 
end; 
2

base (C#) = super (java) = heredado (Object Pascal) (*)

Las 3 palabras clave funcionan de la misma manera.

clase 1) de base Call constructor
métodos de la clase 2) de base Call
3) Asignar valores a propiedades de la clase base (asumen que no son privadas, sólo protegió y se permiten público)
4) de base Call clase destructor (Object Pascal solamente. C# y Java no tiene destructores)


(*) Object Pascal es preferible en lugar de Delphi o Free Pascal porque Object Pascal es el nombre de un lenguaje de programación, mientras que Delphi y gratuito Pascal son compiladores de Object Pascal.

Cuestiones relacionadas