我在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和/或编译器错误?
答案 0 :(得分:7)
在Delphi中,您可以省略实现中的参数。这不是一个错误,它是一个功能。
正确的方法签名由接口部分中的声明评估。
答案 1 :(得分:2)
这是该语言的有意和documented功能。这是描述此功能的文档的一部分,我更加强调:
虽然可以在接口或者接口中声明类 单元的实现部分,定义类的声明 方法必须在实施部分。
在定义声明的标题中,方法名称始终为 使用它所属的类的名称限定。标题 可以从类声明中重复参数列表;如果是的话, 参数的顺序,类型和名称必须完全匹配,并且 如果方法是函数,则返回值也必须匹配。