C#中的接口继承

skr*_*was 10 c# oop interface covariance

我正在尝试在编写应用程序时遇到的问题超出了(对我来说)很大的问题.请看这个(我会尽量缩短代码):

我有root接口叫IRepository<T>.接下来,IBookRepository : IRepository<Book> Next,实现它的具体类:BookRepository : IBookRepository

在我声明的RepositoryManager类中 private IRepository<IRepoItem> currentRepo;

IRepoItem 是一个由Book类实现的接口.

现在,当我尝试做这样的事情时:

currentRepo = new BookRepository();
Run Code Online (Sandbox Code Playgroud)

VisualStudio提供错误消息:

无法将类型'BookRepository'隐式转换为'IRepository'.存在显式转换(您是否错过了演员?)

我尝试显式转换,但抛出运行时异常...

我知道(几乎可以肯定)它是一种叫做协方差的东西,这可能(可能)在.Net 4.0中解决了.不幸的是我正在使用框架版本3.5编写,我无法改变它.请给我一些建议怎么做 - 如何超支这个问题?我想从RepoFactory获得currentRepo,它会产生几种存储库,具体取决于用户的需求.我不知道这里是否允许链接,但我在http://olgatherer.wordpress.com/上写了一些博客,我在其中描述了应用程序的创建.我的英语不好,但我希望能够理解我.提前谢谢你的回答.

最好的问候,skrzeczowas

Jon*_*eet 4

在 .NET 3.5 中,你绝对不能将 anIRepository<Book>视为IRepository<IRepoItem>.

我们需要更多地了解您使用存储库的目的,才能RepositoryManager真正知道如何解决它......但是您可以创建一个可扩展的非通用IRepository接口IRepository<T>吗?使其包含所有不引用 T 的成员。然后您可以声明currentRepo为只是一个IRepository.