我在一个窗口中定义了自己的create方法:
public
constructor Create(aUserNo: string; AOwner: TComponent);...constructor TfrmUserInfo.Create(aUserNo: string; AOwner: TComponent);
begin
inherited Create(AOwner);
FUserNo:=aUserNo;
end;编译器老提示:
[Warning] unUserInfo.pas(51): Method 'Create' hides virtual method of base type 'TCustomForm'加了,virtual或overload之后都不行,而且在继承的窗口中根本不调用这个方法。
public
constructor Create(aUserNo: string; AOwner: TComponent);...constructor TfrmUserInfo.Create(aUserNo: string; AOwner: TComponent);
begin
inherited Create(AOwner);
FUserNo:=aUserNo;
end;编译器老提示:
[Warning] unUserInfo.pas(51): Method 'Create' hides virtual method of base type 'TCustomForm'加了,virtual或overload之后都不行,而且在继承的窗口中根本不调用这个方法。
constructor Create(AOwner: TComponent); override;
public
constructor CreateForm(aUserNo: string; AOwner: TComponent);...constructor TfrmUserInfo.CreateForm(aUserNo: string; AOwner: TComponent);
begin
inherited Create(AOwner);
FUserNo:=aUserNo;
end;
overload——重载virtual ——虚方法
dynamic ——动态方法父类方法为虚方法或动态方法时,派生类的该方法应覆盖父方法,所以用override关键字
overload是用来写重载函数的,不是一个概念
//TForm1是基类TForm1 = class(TForm)
private
FUserNo: string;
public
property UserNo: string read FUserNo write FUserNo;
constructor MyCreate(AUserNo: string; AOwner: TComponent); virtual;
end;implementation{$R *.dfm}{ TForm1 }constructor TForm1.MyCreate(AUserNo: string; AOwner: TComponent);
begin
Create(AOwner);
FUserNo:=AUserNo;
end;
//TForm2是TForm1的派生类TForm2 = class(TForm1)...end;
//在其他窗口中使用TForm2;procedure TForm3.Button1Click(Sender: TObject);
var
f: TForm2;
begin
f:=TForm2.MyCreate('00001234',Self);
f.ShowModal;
end;现在f中的UserNo就具有实际意义的值了,这样很直观,使用起来也方便。