[英]Why is TextWriter.Write(char) not abstract?
TextWriter
是具有一個抽象功能的抽象類- Encoding Encoding { get; }
Encoding Encoding { get; }
。 實現也必須實現void Write(char)
,但是此函數不是抽象的-為什么? 默認實現對我來說沒有任何意義。
這是TextWriter
的設計錯誤。 根據Reflector的說法,所有其他Write*
方法都簡化為Write(char)
。 該文件說類似。 Write(char)
應該是抽象的。
如果開發人員沒有注意到這一點,可能會誤導其創建一個大多數情況下都可以實現的實現,但是在編寫一個char
(不常見)時,它可能什么都不做。 令人驚訝的行為。
如果您從TextWriter
派生,並且知道調用方將僅使用某些重載,例如Write(string)
,則可以通過僅重寫必要的方法並忽略Write(char)
來節省一些工作。 但是,這違反了Liskov替代原則。 早在設計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) {
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.