You need to enable JavaScript to run this app.
优惠活动
大模型
产品
解决方案
定价
更多

Delphi中TProc<Integer>的传入参数值是否可以被修改?

Delphi TProc匿名过程参数修改问题解答

直接结论

你给出的示例代码可以正常通过编译,但对aValue的赋值操作仅作用于匿名过程内部,不会影响外部传入的原始变量。

原因说明

  • Delphi 中默认的TProc<T>泛型匿名过程的参数是按值传递的,匿名过程接收到的aValue是外部传入值的副本,对副本的修改不会同步到原始变量。
  • 若你需要实现修改外部原始变量的需求,原生TProc<T>不满足要求,需要自行声明带var修饰的引用传递参数的泛型匿名过程类型,实现示例如下:
// 自定义支持引用传参的泛型匿名过程类型
type
  TProcWithRef<T> = reference to procedure(var aValue: T);

// 调用示例
procedure Test;
var
  ModifyProc: TProcWithRef<Integer>;
  OriginValue: Integer;
begin
  OriginValue := 10;
  ModifyProc := procedure(var aValue: Integer)
  begin
    aValue := 5;
  end;
  ModifyProc(OriginValue);
  // 执行完成后 OriginValue 的值将变为 5
end;

额外说明

如果你的参数是引用类型(比如类、接口实例),那么即使是按值传递参数,修改参数指向的实例的成员属性是可以同步到外部的,因为按值传递的只是实例的指针副本,指向的还是同一个实例对象,只有修改指针本身才不会生效。

内容的提问来源于stack exchange,提问作者Peter Jones

相关产品推荐
方舟 Agent Plan

超全模态模型 × Harness 升级,最新支持 Deepseek-V4.1-Flash、GLM-5.3 系列、Doubao-Seedream-5.0-pro、Kimi-K3 (部分), 限时 9.9 元起

最近更新时间:2026.10.07 00:51:03