为什么TextWriter.Write(char)不是抽象的?

时间:2014-08-22 12:30:33

标签: c# .net

TextWriter是一个抽象类,有一个抽象函数 - Encoding Encoding { get; }。实现还必须实现void Write(char),但这个函数不是抽象的 - 为什么?默认实现对我来说没有任何意义。

1 个答案:

答案 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) {
    }