以下声明:
type
TRec = record
constructor Create;
end;
Run Code Online (Sandbox Code Playgroud)
产生此编译错误:
E2394记录类型不允许使用无参数构造函数
该文档相当无益地说明:
没有更多信息可用于此错误或警告.
我的问题是为什么语言是这样设计的.这样做是否纯粹是为了回应C#结构的类似限制?
该语种导游这样说:
使用默认的无参数构造函数自动构造记录,但必须显式构造类.由于记录具有默认的无参数构造函数,因此任何用户定义的记录构造函数都必须具有一个或多个参数.
但这没有多大意义.如果记录有默认构造函数,则无法通过RTTI找到它.即使有,为什么这意味着不可能添加另一个呢?您可以为课程这样做.
也许理由是,如果允许我们定义自己的无参数构造函数,我们希望编译器自动调用它们.
注意:我知道您可以使用无参数静态类函数作为变通方法.实际上,我个人总是喜欢使用静态类函数而不是记录构造函数.但这不是问题的关键.我真正想知道的是为什么不允许在记录类型上使用无参数构造函数.
题:
有没有办法用Delphi 2007进行鸭子打字(即没有泛型和高级Rtti功能)?
Duck为Delphi 2010打字资源:
最后编辑:
我已经深入研究了上面列出的资源,并在这里研究了每个发布的答案.