现在有一个类继承自TComponentTA = class(TComponent)
private
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;constructor TA.Create(AOwner: TComponent);
begin
inherited;
//其他代码
end;
请问可不可以把构造函数增加一个参数,改成类似这样:
constructor Create(AOwner: TComponent; sa: string);
begin
//这里该怎么写?
end;
private
public
constructor Create(AOwner: TComponent); override;
destructor Destroy; override;
end;constructor TA.Create(AOwner: TComponent);
begin
inherited;
//其他代码
end;
请问可不可以把构造函数增加一个参数,改成类似这样:
constructor Create(AOwner: TComponent; sa: string);
begin
//这里该怎么写?
end;
这么写有个警告:
W1010 Method 'Create' hides virtual method of base type 'TComponent'
不是constructor Create(AOwner: TComponent); override;
应该是constructor Create(AOwner: TComponent); overload;然后再实现部分写
inherited Create(AOwner);
就可以了!
TA = class(TComponent)
constructor Create(AOwner: TComponent); overload; override;
constructor Create(AOwner: TComponent); overload;
destructor Destroy; override;
private
// ...
public
// ...
end;Delphi允许类有多个构造函数,名字也可以重载。
如何使用,取决于你的设计目标。
constructor Create(AOwner: TComponent); overload; override;
constructor Create(AOwner: TComponent; sa: string); overload;
[DCC Warning] Project1.dpr(34): W1010 Method 'Create' hides virtual method of base type 'TComponent'
哥们儿你试一下,第二个构造函数同样也是这个提示:
[DCC Warning] Project1.dpr(35): W1010 Method 'Create' hides virtual method of base type 'TComponent'另外我不需要默认的那个构造函数目前为止看来四楼的哥们是正解,用reintroduce。
用reintroduce,相当于派生类隐藏了基类的构造函数。
用两个(多个也行)构造函数可以做更复杂的控制,比如一个创建普通实例,另一个创建特化的实例,Delphi创建类的实例时,并不自动调用类的构造函数(不象C++),所以构造类实例的过程可以自己灵活控制。