我擡頭System.Xml.XmlWriter
類,我發現它是一個抽象類調用,你必須創建新的對象與創建方法,我想知道什麼是這背後的OOP推理和爲什麼不XmlWriter
設計更像類來自System.IO
。什麼是XmlWriter設計背後的OOP推理?
回答
XmlWriter
是可以編寫XML文檔的類的抽象基類。在docs中,您可以看到從XmlWriter
派生了各種類,它們將Xml寫入各個目標。 XmlWriter
本身只是爲Xml編寫者定義了公共接口和一些表面實現。
這與abstract TextWriter
class類似。
靜態Create
方法似乎存在,因爲對於某些情況(例如寫入文件),建議使用特定子類。該子類由相應的Create
方法實例化。
注意XmlWriter.Create
用於寫入文件並不一定創造一個XmlTextWriter
。 .NET框架代碼可能會決定不同的(可能是內部的)類型更適合您的特定環境和設置。在您調用靜態方法Create
時,您不必關心實際實例化的類型。要明白其中的道理
時要與所有派生類共享某些實施細則還不允許用戶只需istantiate並直接使用你的基礎抽象類使用抽象類。
的接口是一個純抽象類,這意味着所有方法和字段應該由實現該接口,所以沒有碼再使用除了比方法/屬性簽名在所有的類來實現。
爲System.IO
類,最有可能你是在尋找類,如Path
,File
,Directory
,我沒有看到太多抽象的存在,因爲所有文件都是一樣的,所有的目錄都一樣等,而XmlWriter是通用的,根據具體情況,派生的具體類將逐個實施所需的專業化。
來自JaredPar和Justin的答案在這種情況下更具體到你的問題,我的答案是關於抽象類vs接口的更一般的,並沒有回答你的具體問題。仍然留下我的答案,有一次在那裏...... – 2013-03-12 17:44:55
一個辦法是看一組來自XmlWriter
獲得虛擬方法和類型。幾乎所有的虛擬方法都是Write
變種。就讓我們來看看在反射顯示了10派生類型包括那些
- 寫輸出,在一個標準的文本方式
- 待辦事項UTF8特定的編碼技巧
- 寫輸出異步
- 寫+幅面輸出
基於此,使其成爲抽象類的主要原因是允許開發人員定製輸出的輸出和方式
這是實踐中的factory method pattern,當您希望抽象出應該構建接口或基類的實現的決定時使用它。
在這種情況下,通過在使用XmlWriter.Create
時檢查IL可以看出,該方法有許多可能的不同內部類型,例如, XmlUtf8RawTextWriterIndent
或HtmlUtf8RawTextWriter
可供選擇 - 您需要首先使用Create
方法來創建這些類,因爲這些類型是內部的(因此您不能直接調用它們的構造函數),也因爲它是包含作者應該圍繞的邏輯的Create
方法在什麼情況下創建。
- 1. std :: vector的resize方法背後的設計原理是什麼?
- 2. 什麼是GUID設計背後的理由?
- 3. 「左值」和「右值」命名背後的推理是什麼?
- 4. 不同花括號背後的推理是什麼?
- 5. _PTR_背後的理由是什麼?
- 6. 什麼是XmlTextWriter的目的,如果推薦的XmlWriter
- 7. AOP背後的底層設計模式是什麼?
- 8. Flex中ItemPendingError背後的設計決定是什麼?
- 9. 「monkeypatching」背後的正式設計模式是什麼?
- 10. 庫存管理OOP設計
- 11. 什麼是落後Servlet的設計原理是辛格爾頓
- 12. 設計ServicePointManager.ServerCertificateValidationCallback的原理是什麼?
- 13. STL背後的設計原理
- 14. Web推送背後的技術是什麼?
- 15. 爲什麼要使用OOP概念? OOP的用法是什麼?
- 16. 什麼是iChat的設計?
- 17. Facebook的狀態更新機制背後的設計和架構是什麼?
- 18. IEnumerable:在OOP的背景下它是什麼意思
- 19. 什麼是OOP工廠
- 20. 我的OOP設計是否正確?
- 21. 「int.class.cast(null)`工作的推理是什麼?
- 22. OOP設計建議
- 23. PHP OOP類設計
- 24. OOP設計問題
- 25. OOP設計問題
- 26. OOP設計模式
- 27. OOP設計問題
- 28. 「After Effects」的Light Glow效果背後的理論是什麼?
- 29. 設計一個表格內的XmlWriter
- 30. 什麼是推薦的gitattributes設置?
你可能想問微軟這個問題。 – 2013-03-12 17:22:38
我不同意* close *投票。這個問題的答案很可能「由事實,參考或具體的專業知識支持」。 – 2013-03-14 09:43:53