Delphi 方法在实现中是否可能缺少参数?

Delphi 方法在实现中是否可能缺少参数?,delphi,parameters,delphi-xe2,interface-implementation,Delphi,Parameters,Delphi Xe2,Interface Implementation,我在Delphi XE2(RAD Studio)中遇到一些常见的IDE错误,但这些问题本身并不是我所关心的。这是其中一个bug的结果,它让我偶然发现了其他东西 不知何故,自动完成决定销毁表单的一些方法,所以以前是 procedure TForm1.Button1Click(Sender: TObject); 在实现过程中,类似于 procedure TForm1.Buproced(Sendure :); (不确切,但在某种程度上是这样的) 因此,我不得不手动修复这些方法。然而,我不小心把其中

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

不知何故,自动完成决定销毁表单的一些方法,所以以前是

procedure TForm1.Button1Click(Sender: TObject);
在实现过程中,类似于

procedure TForm1.Buproced(Sendure :);
(不确切,但在某种程度上是这样的)

因此,我不得不手动修复这些方法。然而,我不小心把其中一个修好了

procedure TForm1.Button1Click;
虽然本来应该是

procedure TForm1.Button1Click(Sender: TObject);
但它仍然编译并运行良好

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

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

这有可能吗?或者它可能是一个IDE和/或编译器错误?

在Delphi中,您可以省略实现中的参数。这不是一个bug,而是一个特性


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

这是该语言的一个有意的和独特的特性。这是文档中描述此功能的部分,我还特别强调:

而类可以在接口或 单元的实现部分,定义类的声明 方法必须位于实现部分

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


我从未使用过这个“功能”。当你阅读代码时,这是非常误导的。我不知道这是语言的一个弱点:我看不出这种行为的原因,特别是在为您编写代码的Delphi IDE中(例如,在界面部分使用Ctrl+Shift+C)。这在涡轮帕斯卡时代可能有意义。。。“现在只是困惑,”阿诺·布切兹,确实是个弱点。我从来没有看到任何理由(除了懒惰)利用这个“特性”。甚至在Turbo-Pascal时代也没有。事实上,自从我有了代码完成功能以来,我一直使用代码完成功能,从那以后,我从未编写过没有代码完成功能的类方法实现。@Arnaud原因是维护。可以在接口部分的单个声明中修改参数列表(对于函数,甚至是结果类型!)@TLama:实际上,我更希望实现中缺少默认参数。在我的代码中,默认值是什么并不重要,如果我发现在维护过程中需要修改默认值,那么就不必在这里查找值了。排除我能理解的参数的唯一原因是缩短代码量。