繁体   English   中英

实施接口的IEnumerable <BaseClass> 与IEnumerable <DerivedClass> ?

[英]Implement interface's IEnumerable<BaseClass> with IEnumerable<DerivedClass>?

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

我认为您有两种选择:

  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; } 

您可以为此使用显式接口实现。

class Implementation : IImplementMe
{
    public IEnumerable<DerivedClass> Member;

    IEnumerable<BaseClass> IImplementMe.Member { get { return Member; } }
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM