首页 > 解决方案 > 使用泛型扩展接口不可分配给父 c#

问题描述

有一个接口继承了通用接口。

这是通用接口

public interface IBaseService<TEntity> where TEntity : BaseEntity
{
}

继承通用接口的接口

public interface IChatService :IBaseService<Messages>
{
}

然后我有一个类,它将构造函数中的通用接口作为参数。

public class BaseApi
{
    IBaseService<BaseEntity> _baseService;

    public BaseApi(IBaseService<BaseEntity> baseService)
    {
        _baseService = baseService;
    }
}

当我传递实现通用接口的接口对象时,它不允许我传递接口的对象,它要求传递通用接口。

这是错误: 在此处输入图像描述 任何解决方案?在此先感谢,抱歉英语不好!

标签: c#oopgenericsinheritanceinterface

解决方案


这是很合乎逻辑的。让我们通过重命名我们的类型并创建一个新示例来简化问题:

public class BaseApi
{
    public BaseApi(IBucket<Fruit> baseService) { ... }
}

我们IBucket<Messages>代表一种具体类型的水果(苹果):

public interface IChatService :IBucket<Apple>
{
}

一桶苹果和一桶水果不一样,因为后者可以放一个橙子,而前者不能这样做。

要解决此问题,您可以更改以下签名IChatService

public interface IChatService :IBaseService<BaseEntity>
{
}

或者将预期的IBaseService<Messages>类型传递给BaseApi的 ctor。


推荐阅读