Мне не удалось найти подобную проблему, но не стесняйтесь перенаправить меня, если я просто ее пропустил. Я пытаюсь ознакомиться с шаблоном репозитория.Репозиторий C# с несколькими ограничениями и наследованием
Я приведу вам пример кода, который я пытаюсь выполнить неудачно. Это классы и интерфейсы, которые представляют собой объект, который я использую.
public class AbsObj
{
public string Code { get; set; }
}
public interface IAbsObj
{
bool Save();
}
public class User : AbsObj
{
public string Language{get; set;}
}
public class DbUser : User, IAbsObj
{
public bool Save()
{
return true;
}
}
Затем в хранилище интерфейс
public interface IRepository<T>
{
void Add(T value);
void Update(T value);
void Delete(T value);
}
Родовое Repository
public class Repository<T> : IRepository<T> where T : AbsObj, IAbsObj
{
protected List<T> _lst;
public Repository()
{
_lst = new List<T>();
}
public void Add(T value)
{
}
public void Update(T value)
{
}
public void Delete(T value)
{
}
public bool Save()
{
for (int i = 0; i < _lst.Count; i++)
{
_lst[i].Save();
}
return true;
}
}
Затем более конкретное хранилище, которое должно обрабатывать загрузку пользователей из БД:
public class UserRepository<T> : Repository<T> where T : AbsObj, IAbsObj
{
public void Load()
{
DbUser us = new DbUser();
us.Code = "Cod";
us.Language = "IT";
_lst.Add(us);
}
}
I создал класс DBUser только для того, чтобы иметь возможность создавать XMLUser в будущем, который будет обрабатывать другой тип сбережений. Наследует от пользователя, который в свою очередь наследует от AbsObj. Он реализует IAbsObj. Тем не менее у меня есть ошибка времени компиляции, когда я пытаюсь добавить в список созданный объект DbUser, заявив, что невозможно преобразовать из DBUser в T. Учитывая ограничения, которые я смог выполнить, это было возможно: что мне здесь не хватает? Заранее благодарим за любую помощь!
вы объявленную защищены Список _lst; и пытается добавить DbUser в Load() в этот список без указания , вы не можете это сделать, только когда var repo = new UserRepository (); repo.load(); –
Да, вы правы! Как немой! Как я могу дать вам кредит на правильный ответ в комментарии? – Alberto