C # Реализация пользовательского потока-esque класс - PullRequest
0 голосов
/ 07 апреля 2010

Как мне написать свой собственный класс потокового манипулятора?

По сути, я пытаюсь обернуть голову, храня ссылку на основной поток в писателе. Например, при записи в поток памяти с использованием StreamWriter, когда выполняется Write (), основной поток памяти записывается в.

Можно ли сохранить ссылку на базовый поток без использования указателей или небезопасного кода? Даже если бы это была просто строка, я хотел бы «написать».

На самом деле это не имеет ничего общего с потоковыми писателями, и мне просто интересно, как я могу хранить ссылки в классе. StreamWriter был лучшим примером, который я мог придумать для этого.

Ответы [ 2 ]

1 голос
/ 07 апреля 2010

Не требуется небезопасный код. Посмотрите на этот пример, который я собрал.

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);        
    }
}
0 голосов
/ 07 апреля 2010

Просто объявите свойство типа Stream и присвойте ему некоторое значение.Если вы разместите код, вы можете получить более четкий ответ.Вот пример, хотя.

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");
    }

}
...