【发布时间】:2013-08-05 16:19:06
【问题描述】:
我很想知道为什么我的接口在抽象基类中的实现不满足子类的要求。这是一个例子:
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
.Create()”。 “ConsoleApplication4.BaseManager
.Create()”无法实现“ConsoleApplication4.IBaseManager .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吗?
标签: c# inheritance covariance