gpt4 book ai didi

c# - C#中的接口(interface)继承

转载 作者:可可西里 更新时间:2023-11-01 09:13:18 26 4
gpt4 key购买 nike

我正在尝试解决我在编写应用程序时遇到的相当大的(对我来说)问题。请看这个(为了简单起见,我会尽量缩短代码):

我有一个名为 IRepository<T> 的根接口(interface).接下来,IBookRepository : IRepository<Book>接下来,实现它的具体类:BookRepository : IBookRepository

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

IRepoItem是 Book 类实现的接口(interface)。

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

currentRepo = new BookRepository();

VisualStudio 给出错误信息:

Cannot implicitly convert type 'BookRepository' to 'IRepository'. An explicit conversion exists (are you missing a cast?)

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

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

最好的问候,斯克佐瓦斯

最佳答案

在 .NET 3.5 中,您绝对不能处理 IRepository<Book>作为IRepository<IRepoItem> .

我们需要更多地了解您在 RepositoryManager 中使用存储库的目的。真正知道如何解决它......但是你能创建一个非通用的IRepository吗?接口(interface)IRepository<T>延伸?让它包括所有不引用 T 的成员。然后你可以声明 currentRepo作为一个 IRepository .

关于c# - C#中的接口(interface)继承,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3872988/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com