C# 是否可以限制/要求流参数中的某些功能?

C# 是否可以限制/要求流参数中的某些功能?,c#,.net,stream,iostream,C#,.net,Stream,Iostream,我正在编写一个创建文件目录的应用程序。目前,目录信息存储在一个XML文件中,但我正在尝试将接口抽象为目录,以允许将来使用其他存储机制,如单个ZIP文件、SQL server或HTTP服务器。因此,抽象目录类不是返回文件路径,而是以字节流的形式返回文件。因此,允许文件的源是磁盘,但也允许来自数据库或web服务器的文件。见我以前的照片 但是,根类包含具有不同功能的流。某些流只能读取,其他流只能写入。仍然有一些流支持查找,而其他流不支持 是否存在通过属性或方法限制流返回的功能?例如,我的Catalog

我正在编写一个创建文件目录的应用程序。目前,目录信息存储在一个XML文件中,但我正在尝试将接口抽象为目录,以允许将来使用其他存储机制,如单个ZIP文件、SQL server或HTTP服务器。因此,抽象目录类不是返回文件路径,而是以字节流的形式返回文件。因此,允许文件的源是磁盘,但也允许来自数据库或web服务器的文件。见我以前的照片

但是,根类包含具有不同功能的流。某些流只能读取,其他流只能写入。仍然有一些流支持查找,而其他流不支持

是否存在通过属性或方法限制流返回的功能?例如,我的Catalog类看起来像这样

public abstract class Catalog
{
    ...
    public abstract Stream File
    {
        get;
    }
    ...
}

是否有办法确保
文件
始终返回支持查找的可读流?

如何抽象底层持久性机制。您的来电者需要什么?如果它们都需要来自您的“文件”的相同行为,您能否创建一个包含所有潜在存储要实现的接口,而不是让它们都返回“流”类?

那么,您可以检查流的
CanRead
CanWrite
CanSeek
属性

我不确定我是否正确理解了你的问题,不过。。。你到底想做什么

某些流永远不可搜索(例如
NetworkStream
GZipStream
…),因此,如果您正在处理这些类型的流,则无法强制它们进行搜索


如果您只想限制流的功能(例如,防止写入通常可写的流),可以创建一个包装器,将其实现委托给底层流,但对“禁用”的方法抛出异常。

如果我不清楚,很抱歉。我想知道除了文档之外,是否还有其他方法可以确保Catalog的实现总是从具有特定功能集的File属性返回流。说的是可读和可查找的流。