簡體   English   中英

通過繼承實現接口

[英]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.

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