c# – 使用块计数作为它捕获的IDisposable的引用吗?
发布时间:2020-12-16 01:56:16 所属栏目:百科 来源:网络整理
导读:假设我已经定义了以下方法. static object F(){ return new object();} 如果我编写如下代码,则返回的对象在范围结束之前不能进行垃圾回收. { object x = F(); // cannot yet garbage collect the object // returned by F (referenced as variable x)}// can
假设我已经定义了以下方法.
static object F() { return new object(); } 如果我编写如下代码,则返回的对象在范围结束之前不能进行垃圾回收. { object x = F(); // cannot yet garbage collect the object // returned by F (referenced as variable x) } // can now garbage collect the object // returned by F (referenced as variable x) 如果我编写如下代码,返回的对象可以在F返回后立即进行垃圾回收. { F(); // can now garbage collect the object // returned by F } 但现在假设我将F的定义更改为以下内容. static IDisposable F() { return new SomeDisposableObject(); } 如果我编写如下代码,则返回的对象不能被垃圾收集,并且在使用块结束之前不会被丢弃. using (IDisposable x = F()) { } // immediately x.Dispose() // can now garbage collect the object // returned by F 如果我编写如下代码,那么行为是什么?引用C#语言规范是一个优点. using (F()) { } use块是否计为F返回的实例的引用? 解决方法
是.
你不能在没有参考的情况下处置某些东西. 使用(表达式){statement}的规范states被编译为: { ResourceType resource = expression; try { statement; } finally { if (resource != null) ((IDisposable)resource).Dispose(); } } 资源是一个参考. (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |