我试图解决我在编写应用程序时遇到的相当大的(对我来说)问题。
请看这个(为了简单起见,我将尝试缩短代码):
我有一个名为的根接口IRepository<T>
.
Next, 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/ http://olgatherer.wordpress.com/我在其中描述了应用程序的创建。我的英语不好,但我希望它足以理解我。预先感谢您的答复。
此致,
斯克热佐瓦斯
在 .NET 3.5 中你绝对不能对待IRepository<Book>
as an IRepository<IRepoItem>
.
我们需要更多地了解您使用存储库的目的RepositoryManager
真正知道如何解决它......但是你能创建一个非通用的IRepository
接口哪个IRepository<T>
延伸?让它包含所有不引用T的成员。然后你可以声明currentRepo
作为只是一个IRepository
.
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)