示例如下所示:
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)
问题是,当我想实现界面IA时BBase,正如我所做的那样ABase,发生了错误.是说我只能用IB而不是BBase实现IAin ABase?
你需要的是制作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类也变得通用.
欲了解更多信息: