Я хочу сделать что-то, что я сделал на Java. У меня есть интерфейс с универсальным типом, например:
interface IDAO<T>
{
void Save(T data);
}
И у меня есть два класса, которые реализуют этот интерфейс:
class BankAccountDAO : IDAO<BankAccount>
{
public void Save(BankAccount data){...}
}
class CategoryDAO : IDAO<Category>
{
public void Save(Category data) {...}
}
Мне нужен другой класс со списком, который должен быть объявлен типом IDAO с общим типом T, чтобы я мог добавить конкретные классы в этот список следующим образом:
class Manager
{
private List<IDAO> daoList = new List<IDAO>(); // here is the error
daoList.Add(new BankAccountDAO());
daoList.Add(new CategoryDAO());
public void myMethod(BankAccount b)
{
daoList.ElementAt(0).Save(b); // this should call the implemented Save() method of BankAccountDao
}
}
Я сделал это на Java для проекта, но когда я пытаюсь сделать это на С#, я получаю сообщение об ошибке:
CS0305 C# Для использования универсального типа требуется 1 аргумент типа
Есть ли способ сделать что-то подобное?
IDAO<BankAccount>
иIDAO<Category>
- разные типы. - person Selvin   schedule 16.01.2020TypeFactory.Register<IDAO<BankAccount>, BankAccountDAO>()
илиTypeFactory.Register<IDAO<BankAccount>>(new BankAccountDAO())
, затем используйтеTypeFactory.Resolve<IDAO<BankAccount>>().Save(new BankAccount { ... })
- person Selvin   schedule 17.01.2020