Я пишу приложение, которое создает каталоги файлов.В настоящее время информация каталога хранится в файле XML, но я пытаюсь абстрагировать интерфейс от каталога, чтобы учесть другие будущие механизмы хранения, такие как один ZIP-файл, сервер SQL или сервер HTTP.Таким образом, вместо возврата пути к файлу абстрактный класс Catalog возвращает файлы в виде байтовых потоков.Таким образом, позволяя источником файла быть диском, но также и для файлов, поступающих из базы данных или веб-сервера.См. Мой предыдущий связанный вопрос .
Однако корневой класс Stream включает потоки с различными возможностями.Некоторые потоки могут быть только прочитаны, другие могут быть только записаны.Тем не менее, некоторые потоки поддерживают поиск, а другие - нет.
Есть ли способ ограничить возможности возврата потока свойством или методом?Например, мой класс Catalog выглядит примерно так:
public abstract class Catalog
{
...
public abstract Stream File
{
get;
}
...
}
Есть ли какой-нибудь способ гарантировать, что File
всегда будет возвращать читаемый поток, который поддерживает поиск?