会触发其Dispose函数,理论上不用close,但如过是写操作我碰到过莫名不能保存所有数据的问题,所以现在写代码有强迫症,会先调Flash,然后掉Close.  using (var stream = new FileStream(...))
            {
                // 某些操作
                stream.Flush();
                stream.Close();
            }

解决方案 »

  1.   

    所有的流默认Close其实就是调用Dispose,FileStream的Dispose里面有调用Flush,如果这点逻辑都保证不了那FileStream真是个废物。不过就算调用了Flush,可能仅仅只是写入了操作系统的硬盘缓冲区,如果要保证写入硬盘的话需要手动调用Flush(true),而不是Flush()。
      

  2.   

    不会调用Close,但是会调用Dispose. 用reflector看了下.net的代码。Close和Dispose都是继承自Stream, FileStream没有自己的实现。[code=csharp
    ]public virtual void Close()
    {
        this.Dispose(true);
        GC.SuppressFinalize(this);
    }[/code]public void Dispose()
    {
        this.Close();

    从代码中可以看到Dispose中调用了Close,因此lz可以放心了。
     
      
      

  3.   

    对了,我看的是.net 4.0版本的代码。
      

  4.   

    能使用using块的类   都必须实现IDisposable接口using(A a = new A())
    {
         // use a
    }
    相当于
    A a = new A();
    try
    {
         // use a
    }
    finally
    {
         a.Dispose();
    }使用using  跟它调不调用Close()没有任何关系  使用using  只会调用Dispose()方法
    只是对于所有的Stream及其派生类来讲  Dispose()和Close()实现功能一样     (有些类就不一样 比如SqlConnection)
      

  5.   

    不会,因为Close内部调用Dispose。而不是Dispose调用Close。
    Close方法只是ms为了一些不懂Dispose方法而写的。因为File.Open、File.Close更符合语义,要是给套文件的api你,你第一时间想到关闭文件肯定是Close而不是Dispose。
      

  6.   

    不会默认调用close(),,但会默认调用Dispose()释放资源
      

  7.   

    强迫自己在每次打开某个东西用完之后就close是个好习惯