作者热门文章
- html - 出于某种原因,IE8 对我的 Sass 文件中继承的 html5 CSS 不友好?
- JMeter 在响应断言中使用 span 标签的问题
- html - 在 :hover and :active? 上具有不同效果的 CSS 动画
- html - 相对于居中的 html 内容固定的 CSS 重复背景?
我正在尝试使用
创建 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'
最佳答案
有一个非常简单的方法可以避免这种情况。 给你的新构造函数一个不同的名称。与其他一些流行语言不同,Delphi 命名了构造函数;您不必将它们称为“创建”。您可以调用新的 CreateWithDataset 并且完全不干扰虚拟 Create 构造函数。
TfrmEndoscopistSearch = class(TForm)
/// original constructor kept for compatibility
constructor Create(AOwner: TComponent); override;
/// additional constructor allows for a caller-defined base data set
constructor CreateWithDataset(AOwner: TComponent; ADataSet: TDataSet; ACaption: string = '');
end;
事实上,除非您以多态方式实例化此类,否则您甚至不需要原始构造函数。你可以这样声明你的新的:
TfrmEndoscopistSearch = class(TForm)
/// additional constructor allows for a caller-defined base data set
constructor Create(AOwner: TComponent; ADataSet: TDataSet; ACaption: string = ''); reintroduce;
end;
尝试直接在 TfrmEndoscopistSearch 上调用单参数构造函数会产生编译错误。
<小时/>(以多态方式创建它通常涉及使用 Application.CreateForm:
Application.CreateForm(TfrmEndoscopistSearch, frmEndoscopistSearch);
它总是调用 TComponent 中引入的单参数虚拟构造函数。除非它是您的主要表单,否则您不需要这样做。我写过my feelings on Application.CreateForm之前。)
关于德尔福/帕斯卡 : overloading a constructor with a different prototype,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1758917/
我是一名优秀的程序员,十分优秀!