谁应该负责关闭流

Eri*_*tas 10 .net c# stream

我正在编写一个创建文件"目录"的应用程序,它可以归因于其他元数据文件,例如附件和缩略图.

我正在尝试将接口抽象到目录,以使目录的使用者不需要知道用于存储文件的基础文件系统.所以我创建了一个名为的接口IFileSystemAdaptor,如下所示.

public interface IFileSystemAdaptor:IDisposable
{
    void WriteFileData(string fileName, Stream data);
    Stream ReadFileData(string filename);
    void DeleteFileData(string filename);
    void ClearAllData();
    void WriteMetaFileData(string filename, string path, Stream data);
    Stream ReadMetaFileData(string filename, string path);
    void DeleteMetaFileData(string filename, string path);
    void ClearMetaFilesData(string filename);
}
Run Code Online (Sandbox Code Playgroud)

本质上,我的IFileSystemAdaptor接口公开了一个平面文件列表,也可以与其他元数据文件相关联.

正如您所看到的,我正在使用对通用Stream对象的引用来将接口抽象为文件的数据.这样,Catalog的一个实现可以从硬盘返回文件,而另一个实现可以从Web服务器返回数据.

现在我想弄清楚如何防止我的程序离开流.成员应关闭流的是否有经验法则?如果流的消费者关闭它,或者原始创建流的成员是否应该负责关闭它.

kem*_*002 14

我的规则:

流的消费者是否应关闭它

  1. 如果我从方法返回流,则消费者负责.我是给你的,这是你的责任.

  2. 如果我接受一个流作为方法中的参数,我不会关闭它.退出方法时,我不知道调用方法是否仍然需要它.这是你的流,我只是借用它,我不想搞砸你.

  3. 如果我创建一个流并将其传递给另一个方法,我的方法关闭它(或尝试),当我完成它.我不知道你要用它做什么,但这是我的流,所以我对此负责.