原文见https://blog.marcocantu.com/blog/2020-december-Delphi-const-string-params.html。
大概的意思看以下代码
TForm1 = class(TForm) SpeedButton1: TSpeedButton; procedure SpeedButton1Click(Sender: TObject); private s1: string; procedure Test(const Value: string); { Private declarations } public { Public declarations } end; var Form1: TForm1; implementation {$R *.dfm} procedure TForm1.Test(const Value: string); begin //如果是修改Value,IDE自然是不给你修改的。但是S1是全局变量,你可以访问,可以修改 s1 := '456'; ShowMessage(Value); end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin s1 := Copy('123', 1);
//这里入,S1就不可以修改了 Test(s1); end; end.
然后就
参数以Const 传入是有优化作用的,不用可惜了那如何避免。上面的链接了说了解决方案,在修改S1的时候,将传入的Value放入一个变量里就可以了
procedure TForm1.Test(const Value: string); begin var s2:=Value; s1 := '456'; ShowMessage(Value); end; procedure TForm1.SpeedButton1Click(Sender: TObject); begin s1 := Copy('123', 1); Test(s1); end; end.
这样就可以解决了!!记住一定要在修改s1之前