簡體   English   中英

為什么列表類實現IList接口?

[英]Why is the List Class Implementing IList Interface?

我的問題可能會有點愚蠢,但我真的想知道為什么以這樣的方式設計集合層次結構:它包含接口和類,而可能只是類,或者在頂層和其余類中只有一個接口。

有人可以解釋一下原因嗎?

想想,如果僅定義一個IList接口,則需要類來實現它。 List只是一種這樣的實現,如果可以的話,默認為實現。

另一方面,如果您只有一個列表作為抽象類(即沒有IList接口),則所有自定義列表集合類都必須繼承。 我會說這將是一個糟糕的設計選擇,因為IList的成員更適合合同(單個添加/刪除方法可以具有不同的實現,例如優先級列表等)。 通過將List用作抽象類,可以強制和控制人們的設計選擇。

同樣在C#中,您將另外受到約束,無法從您的自定義集合的任何其他類繼承。

基本上,您應該嘗試查看接口和抽象類提供的不同功能。 這將使您意識到IList和List之間的區別。

每個類只能從一個類派生,而可以從多個接口派生。
為什么我們需要多個接口?
通常,有兩個原因導致我們對一個類擁有多個接口: 1.一類可以具有不同類型的行為2.開放式原則
接口的簡短定義是:接口是一個實體,它確定派生類必須如何行為,並且由於行為的類型不同,因此每個類可能需要不同的接口。
此外,根據SOLID的第二個原則,這是“開放式-封閉式”原則的縮寫,這意味着即使您要向特定類添加新行為(例如CanBark ),實體也必須為擴展而開放,而為修改而封閉。作為類的父類,已經有一個相關的接口( IDogActions ),建議不要修改IDogActions接口,因為可能還有許多其他類在實現此接口,並且不需要新操作,而是可以創建一個新的接口(例如IDogAuditoryActions )。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM