Próbuję opanować dość duży (dla mnie) problem, który napotkałem podczas pisania mojej aplikacji. Spójrz na to, proszę (postaram się skrócić kod dla uproszczenia):Dziedziczenie dziedziczenia w C#
Mam interfejs root o nazwie IRepository<T>
. Następnie IBookRepository : IRepository<Book>
Następnie beton klasy, która implementuje go: BookRepository : IBookRepository
W klasie RepositoryManager oświadczyłem private IRepository<IRepoItem> currentRepo;
IRepoItem
jest interfejs, który jest realizowany przez klasy Book.
Teraz, gdy próbuję zrobić coś takiego:
currentRepo = new BookRepository();
VisualStudio daje komunikat o błędzie:
nie można niejawnie przekonwertować typu 'BookRepository' do 'IRepository'. Wyraźne konwersji istnieje (czy brakuje obsady?)
Próbowałem rzucić jawnie, ale wyjątek środowiska wykonawczego jest wyrzucany ...
wiem (prawie na pewno), że jest to coś, co nazywa kowariancji i jest to (prawdopodobnie) rozwiązane w .Net 4.0. Niestety piszę przy użyciu wersji ramowej 3.5 i nie mogę tego zmienić. Proszę dać mi kilka rad, co robić - jak pokonać ten problem? Chciałbym, aby currentRepo z RepoFactory, który produkuje kilka rodzajów repozytoriów, zależy od potrzeb użytkownika. Nie wiem, czy linki są tutaj dozwolone, ale piszę coś w rodzaju bloga pod numerem http://olgatherer.wordpress.com/, gdzie opisuję tworzenie aplikacji. Mój angielski nie jest dobry, ale mam nadzieję, że wystarczy mnie zrozumieć. Z góry dziękuję za odpowiedź.
poważaniem, skrzeczowas
Co jest zadeklarowany typ currentRepo? –
Nieważne, widzę, że jest to IRepository. –