11

C# ではキーワードで基本クラスにアクセスできbase、Java ではキーワードでアクセスできます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;
4

3 に答える 3

14

行が原因で、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;
于 2012-09-20T03:36:42.000 に答える
11

inherited次のキーワードを使用する必要があります。

procedure TForm3._setCaption(Value: String); 
begin 
  inherited Caption := Value;
end;
于 2012-09-20T03:43:48.863 に答える
3

ベース (C#) = スーパー (Java) = 継承 (Object Pascal) (*)

3 つのキーワードは同じように機能します。

1) 基本クラスのコンストラクターを
呼び出す 2) 基本クラスのメソッドを呼び出す
3) 基本クラスのプロパティに値を代入する (それらはプライベートではなく、保護されたものとパブリックのみが許可されていると仮定します)
4) 基本クラスのデストラクタを呼び出します (Object Pascal のみ。C# と Java はそうではありません) t にはデストラクタがあります)


(*) Object Pascal はプログラム言語の名前であり、Delphi と Free Pascal は Object Pascal のコンパイラであるため、Delphi または Free Pascal よりも Object Pascal を使用することをお勧めします。

于 2013-10-04T12:52:04.503 に答える