用IEnumerable <derivedclass>实现接口的IEnumerable <baseclass>?</derivedclass> </baseclass>

时间:2014-04-23 07:34:37

标签: c# interface

我正在实现一个拥有成员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列表中可能存在重复的项目,因此我无法使用字典来存储额外的内容。实现这一目标的标准,优雅方式是什么?

2 个答案:

答案 0 :(得分:2)

我认为你有两个选择:

  1. 使用派生类作为类型参数:

    interface IImplementMe<T> where T : BaseClass
    {
        IEnumerable<T> Member;
    }
    
    class DerivedClass : BaseClass
    {
        // Some extra stuff here
    }
    
    class Implementation : IImplementMe<DerivedClass>
    {
        IEnumerable<DerivedClass> Member;
    }
    
  2. 使用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; } }
}