基本的なことで申し訳ありませんが
よろしくお願いします。
A = class(TPersistent)
pubclic
constructor Create;
end;
B = class(A)
pubclic
constructor Create;
end;
C = class(B)
pubclic
constructor Create(S: Integer);
end;
この場合
Aのクリエイト
Bのクリエイト
Cのクリエイト
の順で実行されますね。
次に、Cのコンストラクタ宣言で
constructor Create(S: Integer); override;
とすると、
Cのクリエイト
だけが実行されるんですよね
そして、この場合に
constructor C.Create(S: Integer);
begin
inherited Create;
end;
とすると
A,B,Cのクリエイトが実行される
ということでいいのでしょうか?
> とすると
> A,B,Cのクリエイトが実行される
結果的にはそうですが、Helpにも書いてあると思うけど、inherited は、
継承元のメソッドを呼び出すもの。
constructor B.Create;
begin
end;
Bのコンストラクタが上記のように記述なしならば、Aのクリエイトは実行されません。
という回答でよいのかしら?
簡単なことなんですから、テストすりゃいいじゃないですか。
unit Unit1;
interface
uses
Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
Dialogs;
type
A = class(TPersistent)
public
constructor Create;
end;
B = class(A)
public
constructor Create;
end;
C = class(B)
public
constructor Create(S: Integer);
end;
TForm1 = class(TForm)
procedure FormCreate(Sender: TObject);
private
{ Private 宣言 }
public
{ Public 宣言 }
end;
var
Form1: TForm1;
implementation
{$R *.dfm}
{ A }
constructor A.Create;
begin
ShowMessage('A');
end;
{ B }
constructor B.Create;
begin
// inherited Create;
ShowMessage('B');
end;
{ C }
constructor C.Create(S: Integer);
begin
// inherited Create;
// A.Create;
// B.Create;
ShowMessage('C');
end;
procedure TForm1.FormCreate(Sender: TObject);
var
C1:C;
begin
C1:=C.Create(1);
C1.Free;
end;
end.
ツイート | ![]() |