Я пытаюсь перехватить довольно большую (для меня) проблему, с которой мне приходилось сталкиваться при написании моего приложения. Посмотрите на это, пожалуйста (я попытаюсь сократить код для простоты):
У меня есть интерфейс root IRepository<T>
.
Затем IBookRepository : IRepository<Book>
Далее, конкретный класс, который его реализует: BookRepository : IBookRepository
В классе RepositoryManager я объявил private IRepository<IRepoItem> currentRepo;
IRepoItem
- это интерфейс, реализуемый классом Book.
Теперь, когда я пытаюсь сделать что-то вроде этого:
currentRepo = new BookRepository();
VisualStudio дает сообщение об ошибке:
Невозможно неявно преобразовать тип 'BookRepository' в 'IRepository'. Явное преобразование существует (вы пропускаете листинг?)
Я попытался выполнить явно, но исключение времени выполнения выбрано...
Я знаю (почти наверняка), что это что-то называется ковариацией, и это (возможно) решено в .Net 4.0. К сожалению, я пишу, используя фреймворк версии 3.5, и я не могу это изменить. Пожалуйста, дайте мне несколько советов, что делать - как преодолеть эту проблему? Я хотел бы получить currentRepo из RepoFactory, который будет производить несколько видов репозиториев, зависит от потребностей пользователей. Я не знаю, разрешены ли ссылки здесь, но я пишу какой-то блог на http://olgatherer.wordpress.com/, где описываю создание приложения. Мой английский плохой, но я надеюсь, что этого достаточно, чтобы понять меня. Заранее благодарю вас за ответ.
С уважением, skrzeczowas