kim*_*3er 1 c# inheritance repository
我有一个继承自的IRepository接口IRepository<TObject>.我还有一个继承自S的SqlRepository类,而S QLRepository<TObject>又实现了IRepository<TObject>.为什么我不能将SqlRepository的实例实例化为IRepository?
public class MyObject : IObject {
...
}
public interface IRepository<TObject> where TObject : IObject, new() {
...
}
public interface IRepository : IRepository<MyObject> { }
public class SqlRepository<TObject> : IRepository<TObject> where TObject : IObject, new() {
...
}
public class SqlRepository : SqlRepository<MyObject> { }
public class Controller {
private IRepository _repository;
public Controller() {
_repository = new SqlRepository();
}
}
Run Code Online (Sandbox Code Playgroud)
尝试将新的SqlRepository分配给Controller类中的_repository时,上面的示例失败,并显示以下错误消息.
Argument '1': cannot convert from 'SqlRepository' to 'IRepository'
Run Code Online (Sandbox Code Playgroud)
我没有掌握哪种基本的继承原则,请帮忙.
Meh*_*ari 10
因为IRepository是一种IRepository<MyObject>而不是相反.
基本上:
SqlRepository是SqlRepository<MyObject>
这是一个IRepository<MyObject>.
为了使这项工作,您应该继承IRepository<TObject>自IRepository或使SqlRepository实现IRepository取决于在你的意图.
这个问题根本不是特定于泛型的.假设:
interface IMovable { }
interface IDrivable : IMovable { }
class Ball : IMovable { }
Run Code Online (Sandbox Code Playgroud)
显而易见的Ball是IDrivable,它不是一段时间IMovable.