我試圖創建一個子類TForm的與德爾福/帕斯卡爾:超載構造具有不同的原型
- 某些情況下,一個特殊的構造,並
- 一個默認的構造函數,將保持兼容性與當前的代碼。
這是代碼我現在有:
interface
TfrmEndoscopistSearch = class(TForm)
public
/// original constructor kept for compatibility
constructor Create(AOwner : TComponent); overload; override;
/// additional constructor allows for a caller-defined base data set
constructor Create(AOwner : TComponent; ADataSet : TDataSet; ACaption : string = ''); overload;
end;
看來工作,但我總是得到編譯器警告:
[Warning] test.pas(44): Method 'Create' hides virtual method of base type 'TCustomForm'
- 加入 「超載」;在第二個構造函數不會編譯之後。 「[錯誤] test.pas(44):」創建聲明與以前的聲明不同「。
- 使第二個構造函數成爲一個類函數,沒有任何錯誤或警告,但在運行時死於訪問衝突(所有成員變量均爲零)。
bango! 「reintroduce」關鍵字正是需要的。最初的構造函數也是需要的,因爲它將數據集設置爲正確的默認值。 – 2009-11-20 13:56:13