.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 实例,现在可能会被收集……或者我失踪了某物???*
沃梦达教程
本文标题为:.NET 对象事件和处置/GC


猜你喜欢
- 良好实践:如何重用 .csproj 和 .sln 文件来为 CI 创建 2022-01-01
- WebMatrix WebSecurity PasswordSalt 2022-01-01
- C# 中多线程网络服务器的模式 2022-01-01
- 如何用自己压缩一个 IEnumerable 2022-01-01
- C#MongoDB使用Builders查找派生对象 2022-09-04
- Web Api 中的 Swagger .netcore 3.1,使用 swagger UI 设置日期时间格式 2022-01-01
- 带有服务/守护程序应用程序的 Microsoft Graph CSharp SDK 和 OneDrive for Business - 配额方面返回 null 2022-01-01
- MoreLinq maxBy vs LINQ max + where 2022-01-01
- 输入按键事件处理程序 2022-01-01
- 在哪里可以找到使用中的C#/XML文档注释的好例子? 2022-01-01