当前位置:  开发笔记 > 编程语言 > 正文

删除处理对象时的处理程序

如何解决《删除处理对象时的处理程序》经验,为你挑选了3个好方法。

我可以想到一些解决这个问题的方法,但是我觉得应该有一个比我已经提出的更优雅的解决方案.

对象在被处置之前清除其所有事件处理程序的最合适方式是什么.遗憾的是事件处理程序无法枚举.

理论上,对于将处理程序添加到对象以记住删除它的代码,假设对象在超出范围之前将自行清理,是否更为正确?



1> aku..:

有一种方法可以避免事件的这个常见问题 - WeakEvent模式.



2> Jon Limjap..:

理论上,对于将处理程序添加到对象以记住删除它的代码,假设对象在超出范围之前将自行清理,是否更为正确?

对于上述问题,我必须说是.关于事件的基本理论是事件消防员不应该负责管理自己的处理程序; 无论谁添加该事件都应该进行清理.



3> Daniel Paull..:

在我的设计中,我非常严格地定义合同,例如:

每个资源获取必须与发布配对

每次启动服务的呼叫都必须与停止服务的呼叫配对

附着在主体上的每个观察者都必须分离

等等

(此类合同并不罕见,例如您必须将文件的打开和关闭配对,或者在不使用自动垃圾收集的语言中配对新/删除调用).

这些合同中的每一个都可以在某种程度上在运行时进行测试.例如,可以检测并报告分离次数超过其附着的观察者(根据情况断言或例外).

所以,你的问题是:

理论上,对于将处理程序添加到对象以记住删除它的代码,假设对象在超出范围之前将自行清理,是否更为正确?

是现货.答案是肯定的,不仅在理论上,而且在实践中也是如此.在我看来,这些合同可以帮助您避免地毯下的彻底错误.

以这种方式规定思维,你正在建立真正强大的软件.

推荐阅读
有风吹过best
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有