C# Implementando uma classe de escritor de stream personalizada
Pergunta
Como eu escreveria minha própria aula de manipulador de fluxo?
Basicamente, o que estou tentando entender é armazenar a referência ao fluxo subjacente no escritor. Por exemplo, ao gravar em um fluxo de memória usando um streamwriter, quando uma gravação () é feita, o fluxo de memória subjacente é gravado.
Posso armazenar a referência a um fluxo subjacente sem usar ponteiros ou código inseguro? Mesmo que fosse apenas uma corda que eu queria "escrever".
Realmente isso tem pouco a ver com escritores de fluxo, e estou me perguntando como poderia armazenar referências em uma aula. O streamwriter foi o melhor exemplo que eu poderia inventar para isso.
Solução
Nenhum código inseguro é necessário. Confira este exemplo que montei.
public sealed class StreamManipulator
{
private readonly Stream _backingStream;
public StreamManipulator(Stream backingStream)
{
_backingStream = backingStream;
}
public void Write(string text)
{
var buffer = Encoding.UTF8.GetBytes(text);
_backingStream.Write(buffer, 0, buffer.Length);
}
}
Outras dicas
Basta declarar uma propriedade do fluxo de tipo e atribuir algum valor a ele. Se você postar algum código, poderá obter uma resposta um pouco mais clara. Aqui está uma amostra.
class foo
{
public MemoryStream MyMemory { get; set; }
public void Write(string s)
{
MyMemory.Write(System.Text.Encoding.ASCII.GetBytes(s));
}
[STAThread]
static void Main()
{
foo f = new foo();
f.MyMemory = new System.IO.MemoryStream();
f.Write("information");
}
}