7
A
回答
4
這是由COM強加的體系結構限制。它位於任何WinRT類型的核心,它們來自IUnknown和IInspectable。 COM的問題是它只支持接口繼承,但不支持實現繼承。這是一個強大的COM設計目標,實現繼承對實現細節太困難,包括臭名昭着的鑽石問題。
有一種方法可以通過委託來繼承工作,派生類中的每個方法都會顯式調用相應的基本接口方法,但這對您自己來說是非常痛苦的。但除此之外,Windows.UI.Xaml類實現繼承的方式。
1
我相信原因是因爲暴露的類型應該可以從所有不同類型的語言(C#,C++,JavaScript,將來可能更多)使用。
所以如果你有一個類,那麼一個類的使用就是將它重寫成新的類。我可能想要上課,這是用不同的語言完成的。但這是一個問題。你想如何重寫在C#中完成的基類,通過在C++中完成的繼承類?這是行不通的,因爲這兩者都具有完全不同且不兼容的OOP實現。
通過強制暴露的類被封閉,您可以刪除此問題並確保人們不會嘗試這樣做。
我相信還有比這更基本的東西,但這是我首先想到的。
相關問題
- 1. 爲什麼WinRT類型必須密封?
- 2. 通過包裝組件暴露類型
- 3. 什麼是暴露封裝類方法的經驗法則
- 4. 爲什麼StringBuilder類是密封的?
- 5. '必須限定類型爲'
- 6. 爲什麼模板必須在類
- 7. 爲什麼實體類必須有@Id?
- 8. 爲什麼UISearchDisplayController必須是類變量?
- 9. 爲什麼我必須在通用類
- 10. 爲什麼必須導入內部類?
- 11. 爲什麼我們必須明確指定ClassTag類型類
- 12. 爲什麼密封System.ComponentModel.DataAnnotations.DisplayAttribute?
- 13. 爲什麼KeyValueConfigurationCollection不密封?
- 14. 爲什麼ListViewGroup被密封?
- 15. 爲什麼編譯器必須知道一個lambda的類型?
- 16. 爲什麼我們必須提供boost :: get的參數類型?
- 17. 爲什麼必須'自動'聲明都是相同的類型?
- 18. 爲什麼拋出或捕獲的類型必須來自System.Exception
- 19. WCF暴露爲RESTful
- 20. 爲什麼只能在靜態類中定義暴露方法?
- 21. sata硬盤驅動器暴露的是什麼類型的api?
- 22. 爲什麼我必須顯式投射到受限類型?
- 23. 在mysql中,爲什麼M對於float類型必須> = D
- 24. 爲什麼類型參數必須重複兩次?
- 25. 爲什麼tabhost id必須是@android:id類型?
- 26. 多播委託必須具有返回類型void。爲什麼?
- 27. C#。什麼類型必須是可變
- 28. 什麼jQuery被暴露?
- 29. 趴趴的類型必須爲org.apache.spark.ml.linalg.VectorUDT
- 30. 爲什麼我必須重新爲其聲明的類型枚舉參數?
你的標題似乎不同意這個問題? (「必須密封」與「不允許密封」) –