TextWriter
是一个抽象类,有一个抽象函数 - Encoding Encoding { get; }
。实现还必须实现void Write(char)
,但这个函数不是抽象的 - 为什么?默认实现对我来说没有任何意义。
答案 0 :(得分:6)
TextWriter
中的设计错误。根据Reflector,所有其他Write*
方法都缩减为Write(char)
。文档说的类似。 Write(char)
应该是抽象的。
开发人员没有注意到这一点可能会误导创建一个主要起作用的实现,但是当编写char
(这种情况并不常见)时,它可能什么都不做。令人惊讶的行为。
如果您派生自TextWriter
,并且您知道调用者只会使用某些重载,例如Write(string)
,那么只需覆盖必要的方法并忽略Write(char)
即可节省一些工作量。然而,这违反了利斯科夫替代原则。回到BCL设计时,他们可能没有对SOLID原则采取严格的立场。
reference source没有启发性:
// Writes a character to the text stream. This default method is empty,
// but descendant classes can override the method to provide the
// appropriate functionality.
//
public virtual void Write(char value) {
}