luk*_*ski 11 delphi parameters typing
没有类型的参数是什么类型,如类TStringStream:
function Read(var Buffer; Count: Longint): Longint; override;
Run Code Online (Sandbox Code Playgroud)
Buffer参数的类型是什么(它是一种Pointer?).
Rob*_*edy 21
几年前我写了一篇关于这个话题的文章:
在几种情况下使用无类型参数; TStream.Read你问的方法最接近Move我写的程序.这是一段摘录:
Run Code Online (Sandbox Code Playgroud)procedure Move(const Source; var Dest; Count: Integer);该
Move过程将数据从任意变量复制到任何其他变量.它需要接受所有类型的源和目标,这意味着它不需要任何单一类型.该过程不会修改传递的变量的值Source,因此参数的声明使用const而不是var,这是无类型参数的更常见的修饰符.
在这种情况下TStream.Read,源是流的内容,因此您不会将其作为参数传递,但目标是Buffer问题中显示的参数.您可以为该参数传递任何所需的变量类型,但这意味着您需要小心.确保流的内容确实是您提供的参数类型的有效值是您的工作,而不是编译器的工作.
阅读本文的其余部分,了解Delphi使用无类型参数的更多情况.
小智 4
查看 Delphi 帮助中的“无类型参数”
您可以传入任何类型,但必须在实现中对其进行强制转换。帮助表明您不能向其传递数字或无类型数字常量。所以基本上你必须知道需要什么类型,而编译器无法帮助你,所以你需要一个充分的理由来这样做。我想如果您需要该方法来处理不兼容的类型,那么它可能很有用,但是您可以为每个预期类型编写几个重载版本,我建议将其作为更好的解决方案。