如何实现一个已经有其他接口的接口?

use*_*486 1 c# interface

示例如下所示:

interface IA
{
    ICollection<IB> Bs {get;set;}
}

interface IB
{
}


public class BBase : IB
{

}

public class ABase : IA
{
    public ICollection<BBase> Bs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

问题是,当我想实现界面IABBase,正如我所做的那样ABase,发生了错误.是说我只能用IB而不是BBase实现IAin ABase

hor*_*rgh 7

你需要的是制作IA通用的:

interface IA<T> where T : IB
{
    ICollection<T> Bs { get; set; }
}

interface IB
{
}


public class BBase : IB
{

}

public class ABase : IA<BBase>
{
    public ICollection<BBase> Bs { get; set; }
}
Run Code Online (Sandbox Code Playgroud)

接口的实现应该它的定义完全一致,所以在非一般情况下,你预计将有ICollection<IB> Bs {get;set;}ABase究竟,这是它可以接受任何的IBimplemetations.

当接口是generic(interface IA<T> where T : IB)时,它的实现应该提供任何T令人满意的给定约束(即这里的一些精确实现IB).因此,ABase类也变得通用.

欲了解更多信息:

  1. 通用接口(C#编程指南)
  2. where(泛型类型约束)(C#参考)