加入收藏 | 设为首页 | 会员中心 | 我要投稿 李大同 (https://www.lidatong.com.cn/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 百科 > 正文

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();
   }
}

资源是一个参考.

(编辑:李大同)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读