2012-09-20 24 views
9

在C#中,我可以通過base關鍵字訪問基類,在java中,我可以通過super關鍵字訪問它。如何在delphi中做到這一點? 假設我有以下代碼:如何在Delphi中訪問base(super)類?

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; 

回答

12

你得到一個stackoveflow異常,因爲線

Self.Caption := Value; 

是遞歸的。

您可以訪問父屬性CaptionSelf財產鑄造的基類,像這樣:

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

或使用inherited關鍵字

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

你應該用inherited關鍵字:

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

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

3個關鍵字以相同的方式工作。

1)呼叫基類構造
2)呼叫基類的方法
3)分配值,以基類屬性(假設它們不是私有的,只有保護和公共允許)
4)調用基類的析構(Object Pascal中只。C#和Java沒有析構函數)


(*)Object Pascal中是最好的,而不是Delphi或自由帕斯卡由於在Object Pascal是同時Delphi和免費的程序語言的名稱帕斯卡是編譯器對象Pascal。

相關問題