我有一组接口,看起来像这样:
interface IBaseItem { }
interface IDerivedItem : IBaseItem { }
class Item : IDerivedItem { }
interface IBaseContainer<out TItem>
where TItem : IBaseItem
{
TItem Item { get; }
}
interface IDerivedContainer<out TItem> : IBaseContainer<TItem>
where TItem : IDerivedItem
{ }
class Container<TItem> : IDerivedContainer<TItem>
where TItem : IDerivedItem
{
public TItem Item
{
get { return default(TItem); }
}
}
interface IMyContainer : IBaseContainer<IBaseItem> { }
class MyContainer : Container<Item>, IMyContainer { }
当我尝试编译时,编译器会提示:“MyContainer未实现接口成员‘IBaseContainer. Item’。'Container.Item' 无法实现 'IBaseContainer.Item' ,因为它没有匹配的返回类型‘IBaseItem’。”
所以我的问题是:既然 Container 已经通过协变实现了 IBaseContainer,难道不应该也实现 IBaseContainer 吗?还是我理解错了什么?
Container<Item>
已经是IDerivedContainer
的具体实现,为什么还需要实现IMyContainer
呢?你的IMyContainer
接口将强制你使用public IBaseItem Item { get; }
,这将隐藏public IDerivedItem Item { get; }
。 - Yuval ItzchakovIMyContainer
将是一个公共接口,将在解决方案的其他部分中使用,并且它将在以后拥有其他属性。除此之外,我的IDerivedItem
将具有只有某些类型的开发人员才能访问的属性。 - J. Edmond