我很好奇为什么在抽象基类中实现的接口不能满足子类中的要求。以下是一个例子:
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();
}
如果仅仅返回基类方法的结果就足够了,为什么还要添加这些方法呢?为什么编译器不能调用基类中的方法呢?
public class ConcreteManager : BaseManager<IConcrete>, IConcereteManager
- Bala R