.NET 对象事件和处置/GC

.NET object events and dispose / GC(.NET 对象事件和处置/GC)
本文介绍了.NET 对象事件和处置/GC的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

在 Joel Coehoorns 出色的回答之后,我明白我需要更具体,所以我修改了我的代码以更接近我想要理解的东西......

事件: 据我了解,在后台,事件是 EventHandlers 又名委托的集合",当事件引发时将被执行.所以对我来说,这意味着如果对象 Y 有事件 E 并且对象 X 订阅了事件 YE,那么 Y 将引用 X,因为Y必须执行位于X的方法,那样X不能被收集,那我明白了.

//在a中创建对这个(b)的引用.a.EventHappened += new EventHandler(this.HandleEvent);

但这不是 Joel Coehoorn 所说的……

<块引用>

但是,事件存在一个问题,即有时人们喜欢将 IDisposable 与具有事件的类型一起使用.问题是当一个类型 X 订阅另一个类型 Y 的事件时,X 现在有一个对 Y 的引用.这个引用会阻止 Y 被收集.

我不明白 X 将如何引用 Y ???

我对我的例子做了一些修改,以更接近地说明我的情况:

class Service//假设是windows服务,必须24/7在线{一个_a;无效开始(){CustomNotificationSystem.OnEventRaised += new EventHandler(CustomNotificationSystemHandler)_a = 新的 A();B b1 = 新 B(_a);B b2 = 新 B(_a);C c1 = 新 C(_a);C c2 = 新 C(_a);}无效 CustomNotificationSystemHandler(args){//_a.Dispose();由**编辑2***添加a.处置();_a = 新的 A();/*b1,b2,c1,c2 将继续存在,我知道他们现在会订阅到 _a 的前一个实例,我可以,但是在那个例子中,现在,没有人引用 _a 的前一个实例(b 不包含对 _a 的引用)并由我的理论上,以前的 _a 实例,现在可能会被收集……或者我失踪了某物???*
本站部分内容来源互联网,如果有图片或者内容侵犯您的权益请联系我们删除!

相关文档推荐

DispatcherQueue null when trying to update Ui property in ViewModel(尝试更新ViewModel中的Ui属性时DispatcherQueue为空)
Drawing over all windows on multiple monitors(在多个监视器上绘制所有窗口)
Programmatically show the desktop(以编程方式显示桌面)
c# Generic Setlt;Tgt; implementation to access objects by type(按类型访问对象的C#泛型集实现)
InvalidOperationException When using Context Injection in ASP.Net Core(在ASP.NET核心中使用上下文注入时发生InvalidOperationException)
LINQ many-to-many relationship, how to write a correct WHERE clause?(LINQ多对多关系,如何写一个正确的WHERE子句?)