再引入(Reintroduce)
再引入指示字reintroduce用于防止编译器关于隐藏先前的虚拟方法给出警告。例如,
procedure DoSomething; reintroduce; //祖先类中已经有一个DoSomething方法
想要用新的方法隐藏继承得到的虚拟方法时,可以使用reintroduce。
范例:
unit ReintrF;
interface
uses
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
Windows, Messages, SysUtils, Classes, Graphics, Controls, Forms, Dialogs,
StdCtrls;
type
TMyClass = class
procedure One; overload; virtual;
procedure One (I: Integer); overload;
end;
TMyClass = class
procedure One; overload; virtual;
procedure One (I: Integer); overload;
end;
TMySubClass = class (TMyClass)
procedure One; overload; override;
procedure One (S: string); reintroduce; overload;
end;
procedure One; overload; override;
procedure One (S: string); reintroduce; overload;
end;
TForm1 = class(TForm)
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
Button1: TButton;
procedure Button1Click(Sender: TObject);
private
{ Private declarations }
public
{ Public declarations }
end;
var
Form1: TForm1;
Form1: TForm1;
implementation
{$R *.DFM}
{ MyClass }
procedure TMyClass.One;
begin
ShowMessage ('MyClass.One');
end;
begin
ShowMessage ('MyClass.One');
end;
procedure TMyClass.One(I: Integer);
begin
ShowMessage ('Integer: ' + IntToStr (I));
end;
begin
ShowMessage ('Integer: ' + IntToStr (I));
end;
{ MySubClass }
procedure TMySubClass.One;
begin
ShowMessage ('MySubClass.One');
end;
begin
ShowMessage ('MySubClass.One');
end;
procedure TMySubClass.One(S: string);
begin
ShowMessage ('String: ' + S);
end;
begin
ShowMessage ('String: ' + S);
end;
procedure TForm1.Button1Click(Sender: TObject);
var
Obj: TMySubClass;
begin
Obj := TMySubClass.Create;
Obj.One;
Obj.One (10);
Obj.ONe ('Hello');
Obj.Free;
end;
var
Obj: TMySubClass;
begin
Obj := TMySubClass.Create;
Obj.One;
Obj.One (10);
Obj.ONe ('Hello');
Obj.Free;
end;
end.