delphi – 以这种方式删除和重新分配事件是否安全?如果没有,为什么?

A.Event1 := nil;
A.Event2 := nil;
try
  ...
finally
  A.Event1 := MyEvent1;
  A.Event2 := MyEvent2;
end;

可能出现问题吗?

编辑:

我已经接受了巴里的答案,因为它完全回答了我的问题,但根据情景,韦加的答案也是正确的,遗憾的是我不能同时接受.

解决方法

它完全取决于标记为“……”的代码中发生的情况.如果它,例如启动后台线程并尝试在执行继续进入finally块后调用Event1或Event2,您可能会得到意外的结果.

如果代码完全是单线程的,那么是的,当代码在try和finally之间时,不应该触发Event1和Event2.

但是,这确实假设Event1和Event2属性(所有Delphi事件都是方法指针类型的属性)不会在其setter中执行异常操作.病态恶意事件设置器可以松开一个方法指针,并且仍然可以调用它,即使在您稍后使用’nil’作为值调用setter之后也是如此.

但这将是非常不寻常的行为.

相关文章

 从网上看到《Delphi API HOOK完全说明》这篇文章,基本上都...
  从网上看到《Delphi API HOOK完全说明》这篇文章,基本上...
ffmpeg 是一套强大的开源的多媒体库 一般都是用 c/c+&#x...
32位CPU所含有的寄存器有:4个数据寄存器(EAX、EBX、ECX和ED...
1 mov dst, src dst是目的操作数,src是源操作数,指令实现的...