カスタム TraceListner の作成

Debug クラスおよび Trace クラスの出力先となる TraceListener クラスは、このクラスを派生して Write(string) と WriteLine(string) を実装するだけですぐに使えるようになるだけの実装を持っている。
Write(string) メソッドと WriteLine(string) の違いは名前の通り改行コードの付与だけの差である。

  public override void WriteLine(string message)
  {
    StringBuilder sb = new StringBuilder(message.Length + 2);
    sb.Append(message).Append(Environment.NewLine);

    this.Write(sb.ToString());
  }

よって、このような実装だけでもとりあえず問題ない実装ができるのだが、もうすこし機能を追加する必要があり、

  public override void WriteLine(string message)
  {
    StringBuilder sb = new StringBuilder(message.Length + 2);
    sb.Append(message).Append(Environment.NewLine);

    this.Write(sb.ToString());
    this.NeedIndent = true;
  }

とするのが、より理想的な実装となる。これに対して Write(string) の実装は、出力機能を別メソッドとすると、

  protected abstract WriteCore(string message);

  public override void Write(string message)
  {
    if (this.NeedIndent) this.WriteIndent();

    this.WriteCore(message);
  }

というような内容となる。