gpt4 book ai didi

c# - 无法将泛型类转换为泛型接口(interface),为什么?

转载 作者:太空宇宙 更新时间:2023-11-03 17:37:10 25 4
gpt4 key购买 nike

我有一个继承自 IRepository<TObject> 的 IRepository 接口(interface).我还有一个 SqlRepository 类继承自 S QLRepository<TObject> ,它又实现了 IRepository<TObject> .为什么我不能将 SqlRepository 实例实例化为 IRepository?

public class MyObject : IObject {
...
}

public interface IRepository<TObject> where TObject : IObject, new() {
...
}

public interface IRepository : IRepository<MyObject> { }

public class SqlRepository<TObject> : IRepository<TObject> where TObject : IObject, new() {
...
}

public class SqlRepository : SqlRepository<MyObject> { }

public class Controller {
private IRepository _repository;

public Controller() {
_repository = new SqlRepository();
}
}

上面的示例在尝试将新的 SqlRepository 分配给 Controller 类中的 _repository 时失败,并显示以下错误消息。

Argument '1': cannot convert from 'SqlRepository' to 'IRepository'

继承的哪些基本原理没掌握好,请指教。

最佳答案

因为 IRepository是一个 IRepository<MyObject>而不是相反。

基本上:

SqlRepositorySqlRepository<MyObject>
这是一个IRepository<MyObject> .
要做到这一点,您应该继承 IRepository<TObject>来自 IRepository或制作SqlRepository实现 IRepository取决于您的意图。

这个问题根本不是泛型特有的。假设:

interface IMovable { }
interface IDrivable : IMovable { }
class Ball : IMovable { }

很明显Ball不是 IDrivable虽然它是一个 IMovable .

关于c# - 无法将泛型类转换为泛型接口(interface),为什么?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/1088845/

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