Проблема с параметром подкласса 'не найден подходящий метод для переопределения' - PullRequest
0 голосов
/ 14 марта 2020

У меня есть DataSourcesController, который имеет следующие методы:

public abstract ActionResult<IEnumerable<DataSource>> Add(DataSourceDTO dataSourceDTO);
public abstract ActionResult<IEnumerable<DataSource>> Edit(DataSourceDTO dataSourceDTO);

У меня есть SQLDataSourcesController, который переопределяет эти методы:

[HttpPost]
public override ActionResult<IEnumerable<DataSource>> Add(SQLDataSourceDTO sqlDataSourceDTO)
{ //code is in here }

[HttpPut]
public override ActionResult<IEnumerable<DataSource>> Edit(SQLDataSourceDTO sqlDataSourceDTO)
{ //code is in here }

Однако из-за SQLDataSourceDTO вместо DataSourceDTO я получаю следующие ошибки: SQLDataSourcesController.Add(SQLDataSourceDTO': no suitable method found to override SQLDataSourcesController.Edit(SQLDataSourceDTO': no suitable method found to override

Мой SQLDataSourceDTO является подклассом DataSourceDTO, однако:

public abstract class DataSourceDTO
{ //code is in here }
public class SQLDataSourceDTO : DataSourceDTO
{ //code is in here }

Любая помощь в том, как я должен это исправить, приветствуется!

1 Ответ

1 голос
/ 14 марта 2020

Вы не можете переопределить метод с производным типом в качестве параметра, потому что подписи не совпадают. Для переопределения подписи должны точно совпадать.

Но вместо этого вы можете использовать типы generi c.

public class Base
{
    public int Id
    {
        get;
        set;
    }
}

public class Derived : Base
{
    public string Name
    {
        get;
        set;
    }
}

public class Controller<T> where T : Base, new()
{
    public virtual void Compute(T b)
    {
    }
}

public class SqlController : Controller<Derived>
{
    public override void Compute(Derived b)
    {
    }
}
...