我正在使用Delphi 10 Seattle处理VCL应用程序,并且当我注意到Delphi为Ref
参数添加了Rect
自定义属性时,通过IDE创建了一个TDBGrid事件处理程序:
procedure TfrmXxx.yyyDrawColumnCell(Sender: TObject;
const [Ref] Rect: TRect; DataCol: Integer; Column: TColumn;
State: TGridDrawState);
begin
//
end;
更新
答案 0 :(得分:6)
在文档中提到:
常量参数可以通过值或引用传递给函数,具体取决于所使用的特定编译器。要强制编译器通过引用传递常量参数,可以将[Ref]装饰器与const关键字一起使用。
IDE何时或为何决定插入此内容?
IDE永远不会插入它。它只是复制事件处理程序的声明。编写事件处理程序的人将[ref]
符号标记放在那里。
在VCL应用中有效吗?
是。
如果将8字节参数标记为const,它通常会在x64中通过值传递,并在x86中通过引用传递
在两种情况下,将其声明为const [ref]
将强制它通过引用传递
在进行内联汇编和多线程代码时非常有用
在引入const [ref]
之前,我们被迫使用var
代替const
来达到同样的效果。