2012-09-20 10 views
9

W języku C# można uzyskać dostęp do klasy podstawowej za pomocą słowa kluczowego base, aw java mogę uzyskać do niego dostęp za pomocą słowa kluczowego super. Jak to zrobić w delphi? Załóżmy, że mam następujący kod:Jak uzyskać dostęp do klasy podstawowej (super) w 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; 

Odpowiedz

12

otrzymujesz stackoveflow wyjątek, ponieważ linia

Self.Caption := Value; 

jest rekurencyjny.

można uzyskać dostęp do właściwości nadrzędny Caption odlewania właściwość Self do klasy bazowej tak:

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

lub używając inherited słowa kluczowego

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

Należy użyć inherited kluczowe:

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

podstawa (C#) = super (java) = dziedziczony (Object Pascal) (*)

Trzy słowa kluczowe działają w ten sam sposób.

1) podstawa wezwania klasy konstruktor
metody klasa 2) podstawa wezwania
3) Przypisanie wartości do właściwości klasy bazowej (zakładamy, że nie są prywatne, tylko chronione i publiczne są dozwolone)
4) podstawa wezwania klasa destructor (Object Pascal tylko. C# i Java nie ma destruktorów)


(*) Object Pascal jest preferowane zamiast Delphi lub Free Pascal ponieważ Object Pascal to nazwa języka programu podczas Delphi i bezpłatny Pascal to kompilatory obiektu Pascal.

Powiązane problemy