通过继承实现接口
本文关键字:接口 实现 继承 | 更新日期: 2023-09-27 18:18:04
我有一个需要实现方括号操作符的接口。继承它的类实现它。但是,它也继承了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>
)通常适合继承。
你能不能让你的ConcreteFoo
有一个Dictionary<string, Bar>
字段代替?你在最后一个问题中暗示了这一点,但我不清楚为什么你要用继承而不是复合。
如果你真的必须使用继承,你可以使用显式接口实现,像这样:
IBar IFoo.this[String tFooName] { get { return this[tFooName]; } }
…但我建议你还是选择构图。