2017-07-24 33 views
1

我想實現一個MultiDictionary:一個字典,其中包含每個鍵中的列表。可以在字典繼承類中重新定義索引器嗎?

我希望能夠使用除了賦值運算符索引將元素添加到字典:

myMultiDictionary[key] += elementToAdd; 

我首先創建從名單繼承的自定義AddableList和重載+-讓我使用加法賦值運算符:

myAddableList += elementToAdd; 

MultiDicti onary然後是一個簡單的繼承Dictionary<keyType, AddableList<contentType>>

我在索引器有問題。我希望保持字典繼承使用O(1)字典密鑰的性能。但是,我必須將索引器重新定義爲:

  • 如果我創建一個新密鑰,則創建一個空列表;
  • 如果刪除列表中的所有元素,則刪除一個鍵。

繼承對於已經定義了索引器的類是如何工作的? 我的新索引器是否會覆蓋字典中定義的所有訪問方法?

回答

1

由於字典的索引器未標記爲虛擬,因此您無法真正覆蓋它。您只能通過向索引器添加「新」關鍵字來隱藏它,但不要這樣做,任何人都可以將MultiDictionary上傳到Dictionary並使用基類的索引器。對於你來說最好的解決方案是,而不是從字典繼承,你的MultiDictionary應該實現一個接口IDictionary,而不是在MultiDictionary內部保存私有Dictionary實例,並將沒有任何自定義邏輯的所有接口實現重定向到Dictionary實例。換句話說,只需創建代理字典。

+0

「繼承構成」 - 我不應該忘記這一點。這是一個很好的解決方案,非常感謝。 – Queder