Наследование интерфейсов в C #

Я пытаюсь решить довольно большую (для меня) проблему, с которой я столкнулся при написании своего приложения. Посмотрите на это, пожалуйста (я постараюсь сократить код для простоты):

У меня есть корневой интерфейс под названием IRepository . Далее IBookRepository: IRepository Затем конкретный класс, который его реализует: BookRepository: IBookRepository

В классе RepositoryManager я объявил private IRepository currentRepo;

IRepoItem - это интерфейс, который реализуется классом Book.

Теперь, когда я пытаюсь сделать что-то вроде этого:

currentRepo = new BookRepository();

VisualStudio выдает сообщение об ошибке:

Невозможно неявно преобразовать тип BookRepository в IRepository. Существует явное преобразование (вам не хватает приведений?)

Я попытался выполнить приведение явно, но возникло исключение во время выполнения ...

Я знаю (почти наверняка), что это нечто, называемое ковариацией, и это (вероятно, ) решена в .Net 4.0. К сожалению, я использую фреймворк версии 3.5 и не могу это изменить. Пожалуйста, дайте мне несколько советов, что делать - как решить эту проблему? Я хотел бы получить currentRepo от RepoFactory, который будет создавать несколько видов репозиториев в зависимости от потребностей пользователя. Не знаю, разрешены ли здесь ссылки, но я веду какой-то блог на http://olgatherer.wordpress.com/ , где описываю создание приложений. Мой английский не очень хорош, но я надеюсь, что этого достаточно, чтобы меня понять. Заранее благодарю за ответ.

С уважением, skrzeczowas

10
задан Will Marcouiller 6 October 2010 в 13:36
поделиться