Реализация шаблонного метода интерфейса - 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(); } }
ИИ поможет Вам:
- решить любую задачу по программированию
- объяснить код
- расставить комментарии в коде
- и т.д