c# - 为什么此错误表明我的类没有实现此接口(interface)方法?

标签 c# generics .net-core interface return-type

我有一个类,它实现了其他类的接口(interface)和继承。

我不知道为什么我的代码很糟糕。

我得到的错误是:

CS0738 'SizeTypeService' does not implement interface member 'IGenericService<ItemType>.GetAll()'.

'GenericService<SizeType>.GetAll()' cannot implement 'IGenericService<ItemType>.GetAll()' because it does not have the matching return type of 'Task<List<ItemType>>'.

我认为我的界面和类都可以。我不知道为什么 VS 会抛出错误。

public interface IGenericService<TEntity> where TEntity : class
{
    Task<List<TEntity>> GetAll();
    Task<TEntity> GetById(int id);
    Task<TEntity> Insert(TEntity entity);
    Task<TEntity> Update(TEntity entity);
    Task Delete(int id);
}

public class GenericService<TEntity> : IGenericService<TEntity> where TEntity : class
{
    private IGenericRepository<TEntity> genericRepository;

    public GenericService(IGenericRepository<TEntity> genericRepository)
    {
        this.genericRepository = genericRepository;
    }

    public async Task Delete(int id)
    {
        await genericRepository.Delete(id);
    }

    public async Task<List<TEntity>> GetAll()
    {
        return await genericRepository.GetAll();
    }

    public async Task<TEntity> GetById(int id)
    {
        return await genericRepository.GetById(id);
    }

    public async Task<TEntity> Insert(TEntity entity)
    {
        return await genericRepository.Insert(entity);
    }

    public async Task<TEntity> Update(TEntity entity)
    {
        return await genericRepository.Update(entity);
    }
}

public interface ISizeTypeService : IGenericService<ItemType>
{
    Task<List<SizeType>> GetAllSizeTypeActives(int id);
    Task LogicDelete(int id);
}

public class SizeTypeService : GenericService<SizeType>, ISizeTypeService
{
    private ISizeTypeRepository sizeTypeRepository;

    public SizeTypeService(ISizeTypeRepository sizeTypeRepository) : base(sizeTypeRepository)
    {
        this.sizeTypeRepository = sizeTypeRepository;
    }

    public Task<List<SizeType>> GetAllSizeTypeActives(int id)
    {
        return sizeTypeRepository.GetAllSizeTypeActives(id);
    }

    public Task LogicDelete(int id)
    {
        return sizeTypeRepository.LogicDelete(id);
    }
}

最佳答案

您已经定义了您的ServiceTypeClass作为

public class SizeTypeService : GenericService<SizeType>, ISizeTypeService
{
   ...
}

所以你告诉编译器 ServiceTypeService使用基类 GenericServiceTEntity定义为SizeType 。但是,ISizeTypeService它也派生自的接口(interface)告诉编译器该类也实现了 IGenericService接口(interface)在哪里TEntityItemType类(class)。但代码中没有任何类实现方法 GenericService<ItemType>.GetAll() .

所以,错误是说“嘿 - 我找到了匹配 GenericService<SizeType>.GetAll() 的方法 - 其中 TEntitySizeType ,但我找不到匹配 IGenericService<ItemType>.GetAll() 的方法”

要解决此问题,您需要更改 ISizeTypeService定义使用与 GenericService 相同的类对于 TEntity

例如

public interface ISizeTypeService : IGenericService<SizeType>
{
   ...
}

注意:通用参数现在为 SizeTypeGenericService<SizeType> 匹配基类 SizeTypeService源自。

关于c# - 为什么此错误表明我的类没有实现此接口(interface)方法?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71026692/

相关文章:

c# - WPF MessageBox 看起来没有样式,而 WindowsForms MessageBox 看起来不错

c# - 新的 `System.Text.Json` 是否有必需的 property 属性?

generics - 具有多种类型的边界

swift - 如何在 swift 中对泛型变量使用非具体类型?

java - 在通用上下文中使用 getActualTypeArguments

c# - .NET Core 中的 String.Intern 方法在哪里?

ElasticSearch NEST 执行原始查询 DSL

c# - EF : Cannot insert value NULL into column 'ID'

c# - Windows Phone 8 项目中未生成本地化文件

c# - Double.ToString() 的奇怪行为