在Delphi中,.Create和.Create()有什么区别?

4

我正在跟随Pawel Glowacki的《Expert Delphi》书籍学习。在第98页,他有以下的onClick事件处理程序:

procedure TFormFavJSON.btnReadDOMClick(Sender: TObject);
var
  favs: TFavorites; valRoot: TJSONValue;  objRoot: TJSONObject;
  valFavs: TJSONValue;  arrFavs: TJSONArray;
begin
  favs := TFavorites.Create;
  //
  // Several lines of code omitted
  //
  favs.Free;
end;

然而,当我键入 .Cre 并使用代码自动完成 Ctrl + Space 时,IDE 会自动将代码完成为一组空括号。

favs := TFavorites.Create();

那么以下哪个是最正确的呢?
  favs := TFavorites.Create;
  favs := TFavorites.Create();

相关,但肯定不是重复的:https://dev59.com/4VzUa4cB1Zd3GeqP456L 说实话,我很惊讶我找不到重复的。 - Jerry Dodge
你看过生成的代码了吗? - MartynA
还有相关内容:https://stackoverflow.com/q/52742678/327083 - J...
请看:https://dev59.com/gV8e5IYBdhLWcg3wEG7A - J...
3个回答

9

它们都是正确的。Object Pascal 允许在过程或方法不需要参数时省略括号,但也允许包含括号。由您决定哪个更合适。


这取决于你喜欢哪种方式。除非选择一种表达方式会对语义产生直接影响,否则由你决定。它们并不总是等价的。 - J...

8
没有区别。Pascal允许任何一种语法。如果没有必要,我更喜欢不带括号的语法。

7
但是,当分配给过程类型时有所不同,括号保证了调用。 例如,您不能编写 favs.OnChange := favsChange();。一些人在这种情况下更喜欢使用括号进行调用。 - Sertac Akyuz
6
实际上,Pascal语言不允许这两种情况。而Delphi语言可以。 - David Heffernan

3

它们是相同的,两者都是正确的。但如果您使用带参数的构造函数,则括号更加有助于理解。


5
“如果你使用带参数的构造函数,括号将更有帮助。” 更准确地说,括号是必需的,不仅仅是“有帮助”。 - Remy Lebeau
1
哦,看来我的说话方式有点问题。 跟着我走,“helpful”意味着你可以更快地打字。如果代码自动完成没有生成括号,那么你在使用带参数的构造函数时会遇到困难。 - Vuio

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接