delphi [ref]在VCL应用程序中做什么?

b5buobof  于 2023-03-02  发布在  其他
关注(0)|答案(1)|浏览(162)

我正在使用Delphi 10 Seattle开发一个VCL应用程序,并通过IDE创建了一个TDBGrid事件处理程序,这时我注意到Delphi为Rect参数添加了一个Ref自定义属性:

procedure TfrmXxx.yyyDrawColumnCell(Sender: TObject;
  const [Ref] Rect: TRect; DataCol: Integer; Column: TColumn;
  State: TGridDrawState);
begin
  //
end;
  • IDE何时或为什么决定插入此内容?
  • 它对VCL应用程序有影响吗?
    • 更新**

下面是一段视频,供那些无法重现这种行为的人观看:

ux6nzvsh

ux6nzvsh1#

文件中提到:
常量参数可以通过传值或引用传递给函数,这取决于使用的特定编译器。要强制编译器通过引用传递常量参数,可以使用带有const关键字的[Ref]装饰器。
参见常量参数
IDE何时或为什么决定插入此内容?
IDE从来不插入这个,它只是复制事件处理程序的声明,无论是谁编写的事件处理程序,都将pass by [ref] erence标记放在那里。
它对VCL应用程序有影响吗?
是的。
如果你将一个8字节的参数标记为const,那么它通常在x64中通过值传递,在x86中通过引用传递。
将其声明为const [ref]将强制在这两种情况下通过引用传递。
在进行内联汇编和多线程代码时,它非常有用。
在引入const [ref]之前,我们被迫使用var而不是const来实现相同的效果。

相关问题