接口实现泛型方法c#

时间:2021-01-21 14:20:55

标签: c# asp.net-core generics interface

我想做一些基本的控制器。在这个控制器中,我想拥有通用功能(创建、编辑、删除……)——每个控制器用于不同的模型,然后 BasicController 将与接口一起工作。

我想要在每个模型中实现的接口来访问常用功能:

public interface IModel
    {
        public int Id { get; set; }

        public Task CreateAsync<T>(string userName, T model) where T: IModel;
        public Task<bool> EditAsync<T>(string userName, T model) where T: IModel;

        public bool CreateValidation();
        public bool EditValidation();
    }

然后我在一个模型中实现接口:

public class TestResult : IHasFile, IIsReserved, IModel
    {
        [Key]
        public int Id { get; set; }

        public async Task CreateAsync<T>(string resolverGID, T model) where T: TestResultModel
        {
            //do stuff

        }

        public async Task<bool> EditAsync<T>(string resolverGID,T model) where T: TestResultModel
        {
            //do stuff
        }
        ...
    }
public class TestResultModel : TestResult
    {
        [Display(Name = "ATTACHMENTS")]
        public List<Microsoft.AspNetCore.Http.IFormFile> File { get; set; }
        [Display(Name = "USED_STANDARDS")]
        public string[] UsedStandardsAsArray { get; set; }
    }

我想,当 TestResultModel 基于 TestResult 时,它也必须实现 IModel,但我得到错误:

<块引用>

错误 CS0425 方法的类型参数 'T' 的约束 'TestResult.EditAsync(string, T)' 必须与以下约束匹配 接口方法 'IModel.EditAsync(string, T)'。考虑改用显式接口实现。

我尝试将界面更改为:

public interface IModel
    {
        public int Id { get; set; }

        public Task CreateAsync<T>(string userName, T model) where T: class;
        public Task<bool> EditAsync<T>(string userName, T model) where T: class;

        public bool CreateValidation();
        public bool EditValidation();
    }

但仍然无法正常工作。

你知道如何处理这个问题吗?我做错了什么?

非常感谢您的提示。

编辑: 也试过:

public interface IModel
    {
        public int Id { get; set; }

        public Task CreateAsync(string userName, IModel model);
        public Task<bool> EditAsync(string userName, IModel model);

        public bool CreateValidation();
        public bool EditValidation();
    }

然后:

public async Task CreateAsync(string resolverGID, TestResultModel model)
        {
            //do stuff

        }

        public async Task<bool> EditAsync(string resolverGID,TestResultModel model)
        {
            //do stuff
        }
        ...
    }

但是接口没有实现...

0 个答案:

没有答案
相关问题