【发布时间】:2011-04-21 20:10:47
【问题描述】:
我试图解决我在编写应用程序时遇到的(对我而言)相当大的问题。 请看这个(为了简单起见,我会尽量缩短代码):
我有一个名为IRepository<T> 的根接口。
接下来,IBookRepository : IRepository<Book>
接下来,实现它的具体类:BookRepository : IBookRepository
在 RepositoryManager 类中我声明了private IRepository<IRepoItem> currentRepo;
IRepoItem是Book类实现的接口。
现在,当我尝试做这样的事情时:
currentRepo = new BookRepository();
VisualStudio 给出错误信息:
无法将类型“BookRepository”隐式转换为“IRepository”。存在显式转换(您是否缺少演员表?)
我尝试显式转换,但抛出运行时异常...
我知道(几乎可以肯定)它是一种称为协方差的东西,这(可能)在 .Net 4.0 中得到了解决。 不幸的是,我正在使用框架版本 3.5 编写,我无法更改这一点。请给我一些建议该怎么做 - 如何解决这个问题?我想从 RepoFactory 获取 currentRepo ,它会根据用户需求生成几种存储库。我不知道这里是否允许链接,但我在http://olgatherer.wordpress.com/ 上写了一些博客,我在其中描述了应用程序的创建。我的英语不好,但我希望它足以理解我。提前感谢您的回答。
最好的问候, skrzeczowas
【问题讨论】:
-
currentRepo 声明的类型是什么?
-
没关系,我看到它是一个 IRepository
。
标签: c# oop interface covariance