У меня есть интерфейс IRepository, который наследуется от IRepository<TObject>
. У меня также есть класс 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();
}
}
В приведенном выше примере сбой при попытке присвоить новое SqlRepository к _repository в классе контроллера со следующим сообщением об ошибке.
Argument '1': cannot convert from 'SqlRepository' to 'IRepository'
Какой основной принцип наследования я не смог понять, пожалуйста, помогите.
Я решил проблему, сделав SqlRespository реализовать IRepository (открытый класс SqlRepository: SqlRepository, IRepository {}), который кажется немного лишним, но, я думаю, я понимаю логику. –
kim3er