我在論壇上看到了一些評論,似乎人們希望能夠從c#中的多個類繼承。爲什麼你會需要這個?我想不出有什麼用處,但因爲有人需要它,所以必須有一些。從多個類繼承的用途是什麼?
回答
嗯,這裏是一個ASP.NET的WebForms例如:
我有一個基類,網絡控制,讓我們說這是一個簡單的TextBox
。我接着從TextBox
繼承提供格式 - RichTextBox
。
然後我想要一個TextBox
,可以拼寫檢查 - SpellCheckingTextBox
。
如果我需要SpellCheckingRichTextBox
該怎麼辦?我將不得不再次執行拼寫檢查或富文本邏輯並從其中繼承。
實際上,您可以將它們定義爲接口:ISpellCheckingTextBox
和IRichTextBox
,並在SpellCheckingRichTextBox
中實施它們。你也可以寫TextBox
的擴展方法來完成同樣的事情。
多繼承基本上存在缺陷,因爲它將繼承的類視爲平等。如果兩個基類都有ID
字段會怎麼樣?
人們可能想要這樣做,因爲他們習慣於用C++來做到這一點。它在C#中是不允許的。從應用程序維護性的角度來看,IMO是一件好事。通常情況下,使用多個接口將完成同樣的事情。如果你有一個抽象方法設計正確的基類,而且知道繼承對象只需要在該類中定義的方法,那你就有了一個有效的不需要MI的設計模式。
很少有人在C++中使用MI。真的,人們想要使用MI,因爲他們不知道如何以正確的方式做到這一點。 – 2010-06-01 22:09:25
C++(和其他語言)有時會使用多繼承來允許類從多個基類繼承屬性和代碼。當你有接口時,比如在C#和Java中,實際上不需要多繼承,所以它沒有在這些語言中實現。
下面是埃菲爾鐵塔上的多重繼承的好文章:
http://archive.eiffel.com/doc/manuals/technology/bmarticles/joop/multiple.html
「不需要」是超強的:是的,接口完成了MI所提供的大部分功能,但mixin爲組合正交行爲策略提供了強大的成語。這種力量是否值得「死亡鑽石」的麻煩是另一個問題。 – 2010-06-01 13:36:39
想要在C#中使用它的一個合理案例是創建派生對象MarshalByRef。例如,說我要做到以下幾點:
public class FooCorpClass
{
// This class is defined in a 3rd party library and thus can't be changed
}
public class MyFoo : FooCorpClass, MarshalByRef
{
// I can't do this because MarshalByRef isnt' an interface
}
我個人認爲這是一個恥辱,你不能有多重繼承如果沒有衝突,或有衝突處理機制,但他們是在休息。
- 1. 虛擬基類在多級繼承中的用途是什麼?
- 2. 什麼是從基類繼承的?
- 3. 什麼調用從NSManagedObject繼承的類?
- 4. 多態類型的用途是什麼?
- 5. 這是什麼意思繼承用途的計算值
- 6. 受保護繼承的實際用途是什麼?
- 7. UML - 類繼承,你繼承了什麼?
- 8. 多繼承的缺點是什麼?
- 9. 繼承類結構是什麼樣的?
- 10. 爲什麼多個類繼承鑽石問題和多接口繼承沒有?
- 11. 爲什麼我的類不是從父類繼承的?
- 12. 從類的多重繼承
- 13. 什麼是子類從C++中的基類繼承而來?
- 14. 什麼是多重虛擬繼承?
- 15. 什麼類型從ICollection繼承?
- 16. 爲什麼一類從結構繼承
- 17. 從Java類繼承的Kotlin類是否也從Any繼承?
- 18. 一個類的多繼承?
- 19. ,多繼承類中的下劃線標記是什麼意思?
- 20. 多級繼承:從子類
- 21. 爲什麼類級別的typedef不是從tempates繼承的?
- 22. 多類繼承?
- 23. 多類繼承
- 24. 返回從多個繼承類
- 25. 什麼是單元/助手 - 從ActionView :: TestCase繼承的類?
- 26. 爲什麼StringBuilder類不是從Stream繼承的?
- 27. 如何使用繼承來繼承多個類的屬性?
- 28. 什麼是類別的實際使用而不是繼承?
- 29. Ruby中的多重繼承...繼承自多個控制器類。
- 30. 如何從另一個繼承類的繼承類的說話
大多數情況下,如果你需要多重繼承,那麼你的設計可能有些不正確:) – 2010-06-01 11:28:33
在C++的日子裏,有時你需要它,因爲缺少接口 – 2010-06-01 11:32:06
請參閱[用於多重繼承?] http://stackoverflow.com/questions/573913/a-use-for-multiple-inheritance) – 2010-06-01 12:22:16