[英]Implementation of interface through inheritance
我有一個接口,需要實現方括號運算符。 從中繼承的類實現它。 但是,它也繼承自Dictionary <>,其中實現了相同的運算符:
public interface IFoo
{
IBar this[String tFooName] { get; }
}
[Serializable]
public class ConcreteFoo: Dictionary<String, Bar>, IFoo
{
// Implement interface by calling the dictionary
public IBar this[String tFooName] { get { return this[tFooName]; } }
// .... more code ....
}
當我嘗試使用代碼時,編譯器引用已實現的直接接口,並說我無法分配給它:
MyClass[tKeyStr] = new Bar();
錯誤是正確的。 所以,我刪除了我的IFoo接口的實現,並希望通過繼承Dictionary <>,它將自動實現。 它沒有按照我想要的方式進行淘汰。
我收到錯誤'沒有實現接口成員...'。
如何在不使字典成為私有成員的情況下解決這個問題? 有辦法嗎?
它真的需要派生自Dictionary<string, Bar>
嗎? 根據我的經驗,直接從Dictionary<TKey, TValue>
, List<T>
等派生出來並不是一個好主意 - 只有明確設計用於繼承的Collection<T>
(例如Collection<T>
)通常可以很好地適用於繼承。
你能不能讓你的ConcreteFoo
有一個Dictionary<string, Bar>
字段呢? 你在最后一個問題中提到了這一點,但是你不清楚為什么要嘗試使用繼承而不是組合。
如果你真的必須使用繼承,你可以使用顯式接口實現 ,如下所示:
IBar IFoo.this[String tFooName] { get { return this[tFooName]; } }
......但我建議改用構圖。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.