C# 是否可以限制/要求流参数中的某些功能?
我正在编写一个创建文件目录的应用程序。目前,目录信息存储在一个XML文件中,但我正在尝试将接口抽象为目录,以允许将来使用其他存储机制,如单个ZIP文件、SQL server或HTTP服务器。因此,抽象目录类不是返回文件路径,而是以字节流的形式返回文件。因此,允许文件的源是磁盘,但也允许来自数据库或web服务器的文件。见我以前的照片 但是,根类包含具有不同功能的流。某些流只能读取,其他流只能写入。仍然有一些流支持查找,而其他流不支持 是否存在通过属性或方法限制流返回的功能?例如,我的Catalog类看起来像这样C# 是否可以限制/要求流参数中的某些功能?,c#,.net,stream,iostream,C#,.net,Stream,Iostream,我正在编写一个创建文件目录的应用程序。目前,目录信息存储在一个XML文件中,但我正在尝试将接口抽象为目录,以允许将来使用其他存储机制,如单个ZIP文件、SQL server或HTTP服务器。因此,抽象目录类不是返回文件路径,而是以字节流的形式返回文件。因此,允许文件的源是磁盘,但也允许来自数据库或web服务器的文件。见我以前的照片 但是,根类包含具有不同功能的流。某些流只能读取,其他流只能写入。仍然有一些流支持查找,而其他流不支持 是否存在通过属性或方法限制流返回的功能?例如,我的Catalog
public abstract class Catalog
{
...
public abstract Stream File
{
get;
}
...
}
是否有办法确保
文件
始终返回支持查找的可读流?如何抽象底层持久性机制。您的来电者需要什么?如果它们都需要来自您的“文件”的相同行为,您能否创建一个包含所有潜在存储要实现的接口,而不是让它们都返回“流”类?那么,您可以检查流的CanRead
、CanWrite
和CanSeek
属性
我不确定我是否正确理解了你的问题,不过。。。你到底想做什么
某些流永远不可搜索(例如NetworkStream
,GZipStream
…),因此,如果您正在处理这些类型的流,则无法强制它们进行搜索
如果您只想限制流的功能(例如,防止写入通常可写的流),可以创建一个包装器,将其实现委托给底层流,但对“禁用”的方法抛出异常。如果我不清楚,很抱歉。我想知道除了文档之外,是否还有其他方法可以确保Catalog的实现总是从具有特定功能集的File属性返回流。说的是可读和可查找的流。