我正在实现一个拥有成员IEnumerable<BaseClass> Member
的界面。但是我想在每个BaseClass
项中存储一些额外的信息,为此我创建了一个派生类。这是我希望能够做到的:
interface IImplementMe
{
IEnumerable<BaseClass> Member { get; }
}
class DerivedClass : BaseClass
{
// Some extra stuff here
}
class Implementation : IImplementMe
{
IEnumerable<DerivedClass> Member { get; }
}
我认为没有办法做到这一点(如果有,请告诉我!)。 Member
列表中可能存在重复的项目,因此我无法使用字典来存储额外的内容。实现这一目标的标准,优雅方式是什么?
答案 0 :(得分:2)
我认为你有两个选择:
使用派生类作为类型参数:
interface IImplementMe<T> where T : BaseClass
{
IEnumerable<T> Member;
}
class DerivedClass : BaseClass
{
// Some extra stuff here
}
class Implementation : IImplementMe<DerivedClass>
{
IEnumerable<DerivedClass> Member;
}
使用IEnumerable
:
interface IImplementMe
{
IEnumerable Member;
}
class DerivedClass : BaseClass
{
// Some extra stuff here
}
class Implementation : IImplementMe
{
IEnumerable Member;
}
答案 1 :(得分:2)
您可以使用显式接口实现。
class Implementation : IImplementMe
{
public IEnumerable<DerivedClass> Member;
IEnumerable<BaseClass> IImplementMe.Member { get { return Member; } }
}