Наследование от StreamWriter с минимальными усилиями - PullRequest
4 голосов
/ 15 февраля 2010

Я использую внешнюю библиотеку, которая позволяет вести журнал с помощью StreamWriter - теперь я хочу добавить некоторую обработку, основанную на содержимом ведения журнала. Поскольку я хочу избежать зацикливания файла журнала, я хотел бы написать класс, который наследуется от StreamWriter.
Каков наилучший способ наследования от StreamWriter с минимальным количеством повторных реализаций методов / конструкторов?

Ответы [ 2 ]

8 голосов
/ 15 февраля 2010

Я не уверен, что именно вы хотите сделать, но если вы хотите проверить только то, что пишется в потоке, вы можете сделать это:

public class CustomStreamWriter : StreamWriter
{
    public CustomStreamWriter(Stream stream)
        : base(stream)
    {}

    public override void Write(string value)
    {
        //Inspect the value and do something

        base.Write(value);
    }
}
2 голосов
/ 15 февраля 2010

Определите конструктор, который используется внешней библиотекой, и реализуйте это (или просто реализуйте их все), а затем вам просто нужно переопределить методы записи, которые использует ваша внешняя библиотека.

public class Class1 : StreamWriter 
{
    public Class1(Stream stream)
        : base(stream)
    {

    }
    public Class1(Stream stream, Encoding encoding)
        : base(stream, encoding)
    {

    }
    public Class1(Stream stream, Encoding encoding, int bufferSize)
        : base(stream, encoding, bufferSize)
    {

    }
    public Class1(string path)
        : base(path)
    {

    }
    public Class1(string path, bool append)
        : base(path, append)
    {

    }
    public Class1(string path, bool append, Encoding encoding)
        : base(path, append, encoding)
    {

    }
    public Class1(string path, bool append, Encoding encoding, int bufferSize)
        : base(path, append, encoding, bufferSize)
    {

    }

    public override void Write(string value)
    {
        base.Write(value);
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...