Реализация шаблонного метода интерфейса - C#

Узнай цену своей работы

Формулировка задачи:

Суть в том, что есть интерфейс
Листинг программы
  1. interface IAction
  2. {
  3. List<T> GetAll<T>();
  4. }
и множество классов реализующих его, по типу
Листинг программы
  1. public class MyClass1 : IAction
  2. {
  3. public List<SomeClass1> GetAll<SomeClass1>()
  4. {
  5. return SomeClass1List;//тут лист обьектов пользовательского класса
  6. }
SomeClass1 - пользовательский класс, их много(12 штук). ругается что не может преобразовать SomeClass1List к List<SomeClass1>. Предугадывая вопрос зачем такой гемор - задания куратора. Вопрос заключается в том, можно ли реализовать интерфейс, с четким указание что возращать в момент реализации в пользовательском классе?

Решение задачи: «Реализация шаблонного метода интерфейса»

textual
Листинг программы
  1. public class Repository<TEntity> : IRepository<TEntity> where TEntity : BaseEntity
  2.     {
  3.         private readonly DbContext _context;        //контекст, предоставляет доступ к базе данных
  4.         private readonly DbSet<TEntity> _dbSet;     //представляет таблицу из базы - одну определенную сущность
  5.  
  6.         /// <summary>
  7.         /// Создание хранилища
  8.         /// </summary>
  9.         public Repository(DbContext dbContext)
  10.         {
  11.             _context = dbContext;
  12.             _dbSet = _context.Set<TEntity>();
  13.         }
  14.  
  15.         #region IRepository
  16.  
  17.         /// <summary>
  18.         /// Сохранение новой записи в хранилище(если id = 0), или обновление уже существующей
  19.         /// </summary>
  20.         /// <param name="entity">Сущность которую нужно внести в базу, или обновить</param>
  21.         public TEntity SaveOrUpdate(TEntity entity)
  22.         {
  23.             if (entity.Id == 0) return _dbSet.Add(entity);
  24.  
  25.             _dbSet.Attach(entity);
  26.             _context.Entry(entity).State = EntityState.Modified;
  27.  
  28.             return entity;
  29.         }
  30.  
  31.         /// <summary>
  32.         /// Удалить сущность из хранилища
  33.         /// </summary>
  34.         public void Remove(TEntity entity)
  35.         {
  36.             _dbSet.Remove(entity);
  37.         }
  38.  
  39.         /// <summary>
  40.         /// Удалить список сущностей из хранилища
  41.         /// </summary>
  42.         public void RemoveRange(IEnumerable<TEntity> entity)
  43.         {
  44.             _dbSet.RemoveRange(entity);
  45.         }
  46.  
  47.         /// <summary>
  48.         /// Получить сущность по id
  49.         /// </summary>
  50.         public TEntity Get(int id)
  51.         {
  52.             return _dbSet.FirstOrDefault(v => v.Id == id);
  53.         }
  54.  
  55.         /// <summary>
  56.         /// Найти одну сущность по заданому предикату
  57.         /// </summary>
  58.         /// <param name="predicate">Предикат поиска</param>
  59.         public TEntity FindOne(Expression<Func<TEntity, bool>> predicate)
  60.         {
  61.             return _dbSet.SingleOrDefault(predicate);
  62.         }
  63.  
  64.         /// <summary>
  65.         /// Найти все сущности по заданому предикату
  66.         /// </summary>
  67.         /// <param name="predicate">Предикат поиска</param>
  68.         public IQueryable<TEntity> FindAll(Expression<Func<TEntity, bool>> predicate)
  69.         {
  70.             return _dbSet.Where(predicate);
  71.         }
  72.  
  73.         /// <summary>
  74.         /// Получить все сущности данного типа из хранилища
  75.         /// </summary>
  76.         public IQueryable<TEntity> All()
  77.         {
  78.             return _dbSet;
  79.         }
  80.  
  81.         /// <summary>
  82.         /// Сохранить изменения в хранилище
  83.         /// </summary>
  84.         public void SaveChanges()
  85.         {
  86.             try
  87.             {
  88.                 _context.SaveChanges();
  89.             }
  90.             catch (DbEntityValidationException dbValidEx) //отлавливаем ошибки валидации в базе
  91.             {
  92.                 throw new DataException(dbValidEx.Message, dbValidEx);
  93.             }
  94.             catch (DataException dataEx)                    //отлавливаем ошибки из базы
  95.             {
  96.                 throw new DataException(dataEx.Message, dataEx);
  97.             }
  98.             catch (Exception ex)                            //отлавливаем остальные ошибки
  99.             {
  100.                 throw new Exception(ex.Message, ex);
  101.             }
  102.         }
  103.         #endregion
  104.  
  105.         /// <summary>
  106.         /// Освобождение всех ресурсов
  107.         /// </summary>
  108.         public void Dispose()
  109.         {
  110.             _context.Dispose();
  111.         }
  112.     }

ИИ поможет Вам:


  • решить любую задачу по программированию
  • объяснить код
  • расставить комментарии в коде
  • и т.д
Попробуйте бесплатно

Оцени полезность:

5   голосов , оценка 4.4 из 5

Нужна аналогичная работа?

Оформи быстрый заказ и узнай стоимость

Бесплатно
Оформите заказ и авторы начнут откликаться уже через 10 минут