Нет. Потоки волшебным образом не отслеживают каждый экземпляр StreamReader
или StreamWriter
, который их использует. Это относится к любому потоку, а не только к именованным каналам.
var stream = ...;
var reader = new StreamReader(stream);
stream.Dispose();
// reader is not disposed here
Однако по умолчанию удаление StreamReader
или StreamWriter
удаляет поток, с которым они были построены:
var stream = ...;
using(var reader = new StreamReader(stream))
// ...
// stream is disposed here
То есть, если вы не сконструировали их, передав true
их параметру leaveOpen
(это последний, ниже):
var stream = ...;
using(var reader = new StreamReader(stream, encoding, false, 4096, true))
// ...
// stream is not disposed here
Другими словами, по умолчанию читатели или писатели владеют своими потоками, что означает, что они несут ответственность за их закрытие, когда они сами закрыты. Читатели и писатели, которые не владеют своим потоком, при удалении будут только sh свои внутренние буферы, но в противном случае оставят поток без изменений.