Я пытаюсь преодолеть довольно большую (для меня) проблему, с которой я столкнулся при написании своего приложения.Посмотрите на это, пожалуйста (я постараюсь сократить код для простоты):
У меня есть корневой интерфейс с именем IRepository<T>
.Next, IBookRepository : IRepository<Book>
Next, конкретный класс, который его реализует: 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