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

lar*_*moa 10 .net c#

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

usr*_*usr 6

这是一个设计错误TextWriter.根据Reflector,所有其他Write*方法减少到 Write(char).文档说的类似.Write(char)应该是抽象的.

一个开发人员没有注意到这一点可能会误导创建一个主要起作用的实现,但是当编写一个char(这是不常见的)它可能什么也不做.令人惊讶的行为.

如果您派生自TextWriter并且您知道调用者将仅使用某些重载,例如Write(string)您可以通过仅覆盖必要的方法并忽略来节省一些工作Write(char).然而,这违反了利斯科夫替代原则.回到BCL设计时,他们可能没有对SOLID原则采取严格的立场.

参考源是不启发:

    // 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) {
    }
Run Code Online (Sandbox Code Playgroud)