我想知道 - 假设对匿名方法的引用不会超过绑定变量,例如当将其用作回调时 - 如果空间要求或性能之间存在差异,或者
案例1的例子:
type
TCallback = reference to procedure (LogMsg: string);
procedure Log(Msg: string; Callback: TCallback)
begin
Callback(Msg + '(' + DateTimeToStr(Now) + ')');
end;
procedure Test;
var
Suffix: string;
Callback: TCallback;
begin
Suffix := '12345';
Callback :=
procedure (LogMsg: string)
begin
ShowMessage(LogMsg + Suffix);
Delete(Suffix, 1, 1);
end);
Log('Test1', Callback);
Log('Test2', Callback);
Log('Test3', Callback);
end;
案例2的例子:
type
TCallback = reference to procedure (LogMsg: string; var Suf: string);
procedure Log(Msg: string; Callback: TCallback; var Suf: string)
begin
Callback(Msg + '(' + DateTimeToStr(Now) + ')', Suf);
end;
procedure Test;
var
Suffix: string;
Callback: TCallback;
begin
Suffix := '12345';
Callback :=
procedure (LogMsg: string; var Suf: string)
begin
ShowMessage(LogMsg + Suf);
Delete(Suf, 1, 1);
end);
Log('Test1', Callback, Suffix);
Log('Test2', Callback, Suffix);
Log('Test3', Callback, Suffix);
end;
如果我没有犯错,这两个都应该给出以下值:
Test112345
Test22345
Test3345
问题是:这两个中的任何一个可能性能更高(特别是如果使用更大的值而不是单个字符串),更高的内存效率,更多的东西,或它们绝对相等?
我知道变量生命周期存在差异,如果对匿名方法的引用活得比绑定变量长,但这个讨论应该仅仅是当引用的寿命超过约束时的情况变量