有人能解释一下为什么下面的代码失败了吗?
type TIDEThemeObserverFunc = reference to procedure(foo: integer);
var fObserverFuncs: TList<TIDEThemeObserverFunc>
function RegisterEventObserver(aObserverFunc: TIDEThemeObserverFunc): Pointer;
begin
fObserverFuncs.Add(aObserverFunc);
Result := @aObserverFunc;
// line below somehow fails
assert(fObserverFuncs.IndexOf(TIDEThemeObserverFunc(Result)) <> -1);
end;
我曾认为匿名方法可以通过指针进行简单的转换和使用,但这似乎是一个错误的假设。同时,如果有任何解释匿名方法在幕后是如何实现的资源,那将非常棒。谢谢!
TList<(某些方法引用类型)>
。如果泛型破坏了引用计数,即使是像TList<string>
这样的简单情况也将变得无用。 - Barry Kelly