您需要做的就是Write(char)在派生类上实现。TextWriter如果有人调用WriteLine您的新类,WriteLine则会调用基类方法。Write它会做正确的事:用个人\r和\n角色调用你的方法。
实际上,WriteLine(string)看起来像这样:
void WriteLine(string s)
{
Write(s);
Write("\r\n");
}
并且Write(string)实际上是:
foreach (char c in s)
{
Write(c);
}
解析为循环调用的所有Write方法。TextWriterWrite(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!