当前位置:  开发笔记 > 编程语言 > 正文

是否有比嵌套"使用"更好的确定性处置模式?

如何解决《是否有比嵌套"使用"更好的确定性处置模式?》经验,为你挑选了2个好方法。

在C#中,如果我想确定性地清理非托管资源,我可以使用"using"关键字.但是对于多个依赖对象,这最终会进一步嵌套:

using (FileStream fs = new FileStream("c:\file.txt", FileMode.Open))
{
    using (BufferedStream bs = new BufferedStream(fs))
    {
        using (StreamReader sr = new StreamReader(bs))
        {
            // use sr, and have everything cleaned up when done.
        }
    }
}

在C++中,我习惯于使用析构函数来执行此操作:

{    
    FileStream fs("c:\file.txt", FileMode.Open);
    BufferedStream bs(fs);
    StreamReader sr(bs);
    // use sr, and have everything cleaned up when done.
}

在C#中有更好的方法吗?还是我坚持多层次的嵌套?



1> Ryan Lundy..:

您不必嵌套多个使用:

using (FileStream fs = new FileStream("c:\file.txt", FileMode.Open))
using (BufferedStream bs = new BufferedStream(fs))
using (StreamReader sr = new StreamReader(bs))
{
    // all three get disposed when you're done
}


这就像嵌套一样 - 每次连续使用被视为一行代码块 - 想一下if语句,sans {}.你在这里获得的就是避免点击TAB键.
嗯,是的,它是一种格式化技巧,但重点是它是一个有用的技巧,对C#新手来说并不明显.

2> Bob Wintembe..:

您可以在开头大括号之前将using语句放在一起,如下所示:

  using (StreamWriter w1 = File.CreateText("W1"))
  using (StreamWriter w2 = File.CreateText("W2"))
  {
      // code here
  }

http://blogs.msdn.com/ericgu/archive/2004/08/05/209267.aspx

推荐阅读
手机用户2402852387
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有