.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
基础教程推荐
猜你喜欢
- 如何在 IDE 中获取 Xamarin Studio C# 输出? 2022-01-01
- 有没有办法忽略 2GB 文件上传的 maxRequestLength 限制? 2022-01-01
- 为什么Flurl.Http DownloadFileAsync/Http客户端GetAsync需要 2022-09-30
- 如何激活MC67中的红灯 2022-01-01
- 将 Office 安装到 Windows 容器 (servercore:ltsc2019) 失败,错误代码为 17002 2022-01-01
- rabbitmq 的 REST API 2022-01-01
- 将 XML 转换为通用列表 2022-01-01
- MS Visual Studio .NET 的替代品 2022-01-01
- c# Math.Sqrt 实现 2022-01-01
- SSE 浮点算术是否可重现? 2022-01-01