当前位置: 首页 > 编程语言 > C#

C#LearningTutorial-DeletingHandlersWhenDisposingObjects分享

时间:2023-04-10 19:59:16 C#

DeletingHandlersWhenDisposingObjects我能想到一些解决这个问题的方法,但我觉得应该有比我想出的更优雅的解决方案。对象在被处置之前清除其所有事件处理程序的最合适方法是什么。不幸的是,无法枚举事件处理程序。从理论上讲,对于向对象添加处理程序以记住删除它的代码,假设对象在超出范围之前会自行清理不是更正确吗?从理论上讲,对于向对象添加处理程序以记住删除它的代码,假设对象在超出范围之前会自行清理不是更正确吗?对于上面的问题,我必须说是。关于事件的基本理论是事件触发者不应该负责管理他们自己的处理程序;添加事件的人应该进行清理。有一种方法可以避免这种常见的事件问题——WeakEvent模式。在我的设计中,我非常严格地定义契约,例如:(这样的契约并不少见,例如你必须配对打开和关闭文件,或者配对新/删除调用在不使用自动垃圾收集的语言中).这些合约中的每一个都可以在一定程度上在运行时进行测试。例如,可以检测和报告脱离的观察者多于附着的观察者(根据情况作为断言或异常)。因此,您的问题是:理论上,对于向对象添加处理程序以记住将其删除的代码,假设对象在超出范围之前会自行清理是否更正确?有货。答案是肯定的,不仅在理论上如此,在实践中也是如此。在我看来,这些合同可以帮助您避免在地毯下犯下彻底的错误。规定以这种方式思考,你就在构建真正强大的软件。对我来说,事件处理程序是.NET应用程序内存消耗的最大威胁,尤其是当您开始在Web服务器上下文中使用它时。对我来说,它始终是附加到deattach的对象的责任。附加对象的生命周期应始终小于或等于它所附加的对象的生命周期,否则事件的设计将有问题,因为您不希望收到对无意义的对象更改的通知。如果它们的生命周期相等,它们将一起超出范围并且您不需要做任何事情,如果它比连接的对象必须分离的时间短。在一个基本的Web应用程序中,您只有3种类型的生命周期,应用程序、会话和页面,并且规则很容易应用。在更复杂的应用程序中,这需要更多的思考。以上就是C#学习教程的全部内容:加工对象时删除加工程序。侵权请点击右侧联系管理员删除。如需转载请注明出处: