2010-02-15 8 views
4

J'utilise une bibliothèque externe qui permet la journalisation à l'aide de StreamWriter. Maintenant, je souhaite ajouter un traitement basé sur le contenu de la journalisation. Comme je veux éviter de faire une boucle dans le fichier journal, je voudrais écrire une classe qui hérite de StreamWriter.
Quelle est la meilleure façon d'hériter de StreamWriter avec aussi peu de ré-implémentations de méthodes/constructeurs?Hériter de StreamWriter avec le plus petit effort possible

+0

Quel comportement voulez-vous changer de StreamWriter dans votre classe dérivée? –

+0

Malheureusement, je ne sais pas avec certitude quelle implémentation réelle de write est appelée - mon estimation est juste Write (string). Je veux essentiellement garder tout dans le fichier, mais ajouter un peu de manipulation pour vérifier si le contenu journalisé contient x. Je préférerais cela à l'écriture d'un programme séparé qui lit périodiquement le journal car il serait plus performant. – weismat

+0

Ensuite, utilisez ma réponse mais remplacez toute la méthode Write et placez un point d'arrêt pour voir ce qui est appelé dans votre scénario spécifique. –

Répondre

8

Je ne suis pas sûr de ce que vous voulez faire exactement, mais si vous voulez seulement vérifier ce qui est écrit dans le flux, vous pouvez le faire:

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); 
    } 
} 
+1

Vous voulez juste que vous ayez seulement à écrire Write (char) car tous les autres appels à Write finissent là-bas, moins d'effort que de surcharger chaque méthode d'écriture. et si vous appelez base.Write() sur l'autre méthode, vous pourriez écrire les mêmes données plus d'une fois (ex: call to write (base) call (char)) – Mel

1

Déterminer le constructeur de la bibliothèque externe utilisez et implémentez-le (ou mettez-les simplement en œuvre) et vous n'avez plus qu'à remplacer les méthodes d'écriture utilisées par votre bibliothèque externe.

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); 
    } 
} 
Questions connexes