Можно ли не закрывать StreamReader / StreamWriter, чтобы основной поток оставался открытым?

У меня есть класс, который по сути является оболочкой Stream для чтения / записи, но ожидается, что этим потоком будет управлять потребитель этого класса. Для простоты использования Я использую классы StreamReader и StreamWriter для выполнения операций ввода-вывода в потоке. Обычно я бы заключал программу чтения и записи в , используя блоки , но я хочу избежать закрытия программы чтения и записи, потому что это также закрывает основной поток, и я должен держать его открытым.

Это так. безопасно с точки зрения управления памятью / ресурсами, чтобы не закрывать StreamReader / StreamWriter, если я ожидаю, что базовый поток будет управляться вызывающим? Будут ли считыватель и писатель собирать мусор, когда поток явно закрыт в другом месте?

public class Wrapper 
{
    private Stream _underlyingStream;
    public Wrapper(Stream underlyingStream) 
    {
        _underlyingStream = underlyingStream;
    }

    public string GetValue() 
    {
        _underlyingStream.Seek(0, SeekOrigin.Begin);
        var reader = new StreamReader(_underlyingStream);
        return reader.ReadToEnd(); // we're done, but the stream is not ours to close
    }
}
17
задан Adam Lear 16 December 2010 в 22:06
поделиться