gpt4 book ai didi

delphi - 为什么Delphi允许构造函数参数不正确?

转载 作者:行者123 更新时间:2023-12-03 14:59:17 31 4
gpt4 key购买 nike

这似乎是一个非常愚蠢的问题,但我不知道为什么允许编译:

program ConstructorWithParam;

{$APPTYPE CONSOLE}

uses
System.SysUtils;

type

TThing = class(TObject)
private
FParent: TObject;
public
constructor Create(const AParent: TObject);
end;

{ TThing }

constructor TThing.Create; // <- WTF? Why does the compiler not complain?
begin
FParent := AParent;
end;

var
Thing: TThing;
begin
try
Thing := TThing.Create(TObject.Create);
Readln;
except
on E: Exception do
Writeln(E.ClassName, ': ', E.Message);
end;
end.

我使用的是Delphi XE5,尚未在其他版本上进行测试。谢谢。

最佳答案

表单类中的第一个声明被认为是正确的。实现版本无需识别所需参数;它们是由原始声明假设的。这是语言本身的一部分。

这是一个很好的例子来说明这一点:

type
TMyClass = class (Tobject)
procedure DoSometimg(DoA, DoB: Boolean);
end;

实现:

procedure TMyClass.DoSomething;   // Note both parameters missing
begin
if DoA then // Note not mentioned in implementation declaration
DoOneThing; // but still can be used here
if DoB then
DoAnotherThing;
end;

我个人更喜欢使实现和接口(interface)声明匹配,因为这样可以更轻松地识别参数,而无需在代码编辑器中跳来跳去。

关于delphi - 为什么Delphi允许构造函数参数不正确?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32366298/

31 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com