我很想知道为什么我的接口在抽象基类中的实现不满足子类中的需求。下面是一个例子:C#协方差和继承
public interface IBase { }
public interface IConcrete : IBase { }
public interface IBaseManager<out T>
where T : IBase
{
T Create();
IEnumerable<T> SelectAll();
}
public interface IConcreteManager : IBaseManager<IConcrete> { }
public abstract class Base : IBase { }
public class Concrete1 : Base, IConcrete { }
public abstract class BaseManager<T> : IBaseManager<T> where T : class, IBase
{
#region IBaseManager<T> Members
public T Create()
{
throw new NotImplementedException();
}
public IEnumerable<T> SelectAll()
{
throw new NotImplementedException();
}
#endregion
}
public class ConcreteManager : BaseManager<Concrete>, IConcereteManager
{
//error occurs here
}
这是正在产生的误差:
'ConsoleApplication4.ConcreteManager' 不实现接口成员 'ConsoleApplication4.IBaseManager < ConsoleApplication4.IConcrete> .Create()' 。
'ConsoleApplication4.BaseManager < ConsoleApplication4.Concrete> .Create()' 无法实现 'ConsoleApplication4.IBaseManager < ConsoleApplication4.IConcrete> .Create()',因为它没有 'ConsoleApplication4.IConcrete' 的匹配返回类型。
如果我添加这些方法的ConcreteManager
类,一切都很好,编译器是幸福的。
public new IConcrete Create()
{
return base.Create();
}
public new IEnumerable<IConcrete> SelectAll()
{
return base.SelectAll();
}
如果简单地返回基类返回的方法就足够了,为什么必须添加方法?为什么编译器不能调用基类中的方法?
我期望扩展接口是问题,请尝试删除它。 – 2011-06-09 01:32:41
你不想'公共类ConcreteManager:BaseManager,IConcereteManager'? –
2011-06-09 02:00:26