Ich versuche, ziemlich große (für mich) Problem zu überrennen, dass ich beim Schreiben meiner Anwendung stieß. Schauen Sie sich das bitte an (ich werde versuchen, den Code für die Einfachheit zu kürzen):Interfaces Vererbung in C#
Ich habe Root-Schnittstelle namens IRepository<T>
. Als nächstes IBookRepository : IRepository<Book>
nächstes werden konkrete Klasse, die es implementiert: BookRepository : IBookRepository
In der RepositoryManager Klasse deklariert ich private IRepository<IRepoItem> currentRepo;
IRepoItem
ist eine Schnittstelle, die durch Buch-Klasse implementiert wird.
Jetzt, wenn ich versuche, so etwas zu tun:
currentRepo = new BookRepository();
Visual Studio Fehlermeldung gibt:
kann nicht implizit Typ umwandeln 'BookRepository' auf 'IRepository'. Eine explizite Konvertierung vorhanden ist (möglicherweise fehlt eine Guss?)
Ich habe versucht, explizit zu werfen, aber Laufzeit Ausnahme ausgelöst wird ...
I (fast sicher) wissen, dass es etwas namens Kovarianz und das ist (wahrscheinlich) in .Net 4.0 gelöst. Leider schreibe ich mit Framework-Version 3.5, und ich kann das nicht ändern. Bitte geben Sie mir einige Ratschläge, wie Sie dieses Problem lösen können. Ich möchte currentRepo von RepoFactory erhalten, das nur wenige Arten von Repositories produziert, abhängig von den Bedürfnissen der Benutzer. Ich weiß nicht, ob Links hier erlaubt sind, aber ich schreibe eine Art Blog unter http://olgatherer.wordpress.com/, wo ich die Erstellung von Anwendungen beschreibe. Mein Englisch ist nicht gut, aber ich hoffe, dass es genug ist, um mich zu verstehen. Vielen Dank im Voraus für die Antwort.
Mit freundlichen Grüßen, skrzeczowas
Was ist der deklarierte Typ von currentRepo? –
Macht nichts, ich sehe es ist ein IRepository. –