是否应该有可能方法在实现中缺少它们的参数?

时间:2013-07-28 16:35:56

标签: delphi parameters delphi-xe2 interface-implementation

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

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

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和/或编译器错误?

2 个答案:

答案 0 :(得分:7)

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

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

答案 1 :(得分:2)

这是该语言的有意和documented功能。这是描述此功能的文档的一部分,我更加强调:

  

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

     

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