如何访问Delphi中的基(超)类?

时间:2012-09-20 03:26:30

标签: delphi inheritance

在C#中,我可以通过base关键字访问基类,在java中,我可以通过super关键字访问它。如何在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;

3 个答案:

答案 0 :(得分:13)

您收到了stackoveflow异常,因为该行

Self.Caption := Value;

是递归的。

您可以访问父属性Caption,将Self属性转换为基类,如下所示:

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

或使用inherited关键字

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

答案 1 :(得分:11)

您应该使用inherited关键字:

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

答案 2 :(得分:2)

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

3个关键字的工作方式相同。

1)调用基类构造函数
2)调用基类方法
3)为基类属性赋值(假设它们不是私有的,只允许保护和公共) 4)调用基类析构函数(仅对象Pascal .C#和Java没有析构函数)


(*)Object Pascal优于Delphi或Free Pascal,因为Object Pascal是程序语言的名称,而Delphi和Free Pascal是Object Pascal的编译器。