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