Реализация шаблонного метода интерфейса - C#
Формулировка задачи:
Суть в том, что есть интерфейс
и множество классов реализующих его, по типу
SomeClass1 - пользовательский класс, их много(12 штук).
ругается что не может преобразовать SomeClass1List к List<SomeClass1>.
Предугадывая вопрос зачем такой гемор - задания куратора.
Вопрос заключается в том, можно ли реализовать интерфейс, с четким указание что возращать в момент реализации в пользовательском классе?
Листинг программы
- interface IAction
- {
- List<T> GetAll<T>();
- }
Листинг программы
- public class MyClass1 : IAction
- {
- public List<SomeClass1> GetAll<SomeClass1>()
- {
- return SomeClass1List;//тут лист обьектов пользовательского класса
- }
Решение задачи: «Реализация шаблонного метода интерфейса»
textual
Листинг программы
- public class Repository<TEntity> : IRepository<TEntity> where TEntity : BaseEntity
- {
- private readonly DbContext _context; //контекст, предоставляет доступ к базе данных
- private readonly DbSet<TEntity> _dbSet; //представляет таблицу из базы - одну определенную сущность
- /// <summary>
- /// Создание хранилища
- /// </summary>
- public Repository(DbContext dbContext)
- {
- _context = dbContext;
- _dbSet = _context.Set<TEntity>();
- }
- #region IRepository
- /// <summary>
- /// Сохранение новой записи в хранилище(если id = 0), или обновление уже существующей
- /// </summary>
- /// <param name="entity">Сущность которую нужно внести в базу, или обновить</param>
- public TEntity SaveOrUpdate(TEntity entity)
- {
- if (entity.Id == 0) return _dbSet.Add(entity);
- _dbSet.Attach(entity);
- _context.Entry(entity).State = EntityState.Modified;
- return entity;
- }
- /// <summary>
- /// Удалить сущность из хранилища
- /// </summary>
- public void Remove(TEntity entity)
- {
- _dbSet.Remove(entity);
- }
- /// <summary>
- /// Удалить список сущностей из хранилища
- /// </summary>
- public void RemoveRange(IEnumerable<TEntity> entity)
- {
- _dbSet.RemoveRange(entity);
- }
- /// <summary>
- /// Получить сущность по id
- /// </summary>
- public TEntity Get(int id)
- {
- return _dbSet.FirstOrDefault(v => v.Id == id);
- }
- /// <summary>
- /// Найти одну сущность по заданому предикату
- /// </summary>
- /// <param name="predicate">Предикат поиска</param>
- public TEntity FindOne(Expression<Func<TEntity, bool>> predicate)
- {
- return _dbSet.SingleOrDefault(predicate);
- }
- /// <summary>
- /// Найти все сущности по заданому предикату
- /// </summary>
- /// <param name="predicate">Предикат поиска</param>
- public IQueryable<TEntity> FindAll(Expression<Func<TEntity, bool>> predicate)
- {
- return _dbSet.Where(predicate);
- }
- /// <summary>
- /// Получить все сущности данного типа из хранилища
- /// </summary>
- public IQueryable<TEntity> All()
- {
- return _dbSet;
- }
- /// <summary>
- /// Сохранить изменения в хранилище
- /// </summary>
- public void SaveChanges()
- {
- try
- {
- _context.SaveChanges();
- }
- catch (DbEntityValidationException dbValidEx) //отлавливаем ошибки валидации в базе
- {
- throw new DataException(dbValidEx.Message, dbValidEx);
- }
- catch (DataException dataEx) //отлавливаем ошибки из базы
- {
- throw new DataException(dataEx.Message, dataEx);
- }
- catch (Exception ex) //отлавливаем остальные ошибки
- {
- throw new Exception(ex.Message, ex);
- }
- }
- #endregion
- /// <summary>
- /// Освобождение всех ресурсов
- /// </summary>
- public void Dispose()
- {
- _context.Dispose();
- }
- }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д