在您的TextWriter 派生类上实现Write(char) 就是您需要做的所有事情。如果有人在您的新类上调用WriteLine,则会调用基类WriteLine 方法。它会做正确的事:使用单独的 \r 和 \n 字符调用您的 Write 方法。
实际上,WriteLine(string) 看起来像这样:
void WriteLine(string s)
{
Write(s);
Write("\r\n");
}
Write(string) 实际上是:
foreach (char c in s)
{
Write(c);
}
TextWriter 中的所有 Write 方法都解析为在循环中调用 Write(char) 的东西。
您真的不必执行任何其他操作。只需覆盖Write(char) 并将其插入即可。它会起作用。
您可以覆盖那些其他方法。这样做会让你的课堂更有效率(更快)。但这不是必需的。我说做你能做的最简单的事情。然后,如果您在分析后确定您的自定义编写器太慢,请根据需要覆盖其他方法。
这是一个最小的TextWriter后代:
public class ConsoleTextWriter: TextWriter
{
public override void Write(char value)
{
Console.Write(value);
}
public override Encoding Encoding
{
get { return Encoding.Default; }
}
}
如果我接着写:
using (var myWriter = new ConsoleTextWriter())
{
myWriter.Write("hello, world");
myWriter.WriteLine();
myWriter.WriteLine();
myWriter.WriteLine("Goodbye cruel world.");
myWriter.Write("Fee fie foe foo!");
}
输出是:
hello, world
Goodbye cruel world.
Fee fie foe foo!