4

我在 Delphi XE2 (RAD Studio) 中遇到了一些常见的 IDE 错误,但问题本身并不是我关心的问题。这是其中一个错误的结果,它让我偶然发现了其他东西。

不知何故,自动完成决定破坏表单的一些方法,所以过去是......

procedure TForm1.Button1Click(Sender: TObject);

在实施中变成了......

procedure TForm1.Buproced(Sendure :);

(不准确,但在某种程度上是这样的)

所以,我不得不手动修复这些方法。但是,我不小心将其中一个固定为...

procedure TForm1.Button1Click;

虽然它应该是...

procedure TForm1.Button1Click(Sender: TObject);

但它仍然编译并运行良好。

要进行测试,请启动一个新的 VCL Forms 应用程序并只删除一个TButton控件,为 制作一个事件处理程序OnClick,并将其过程更改为...

procedure TForm1.Button1Click;
var
  B: TButton;
begin
  B:= TButton(Sender);
  B.Caption:= 'Something';
end;

这应该是可能的吗?还是可能是 IDE 和/或编译器错误?

4

2 回答 2

7

在 Delphi 中,您可以省略实现中的参数。这不是一个错误,这是一个功能。

正确的方法签名由接口部分中的声明评估。

于 2013-07-28T16:38:25.227 回答
2

这是该语言的有意和记录的功能。这是描述此功能的文档的一部分,我特别强调:

虽然可以在单元的接口或实现部分中声明一个类,但定义类方法的声明必须在实现部分中。

在定义声明的标题中,方法名称总是用它所属的类的名称来限定。标题 可以重复类声明中的参数列表;如果是,则参数的顺序、类型和名称必须完全匹配,如果方法是函数,则返回值也必须匹配。

于 2013-07-29T09:16:07.060 回答