Множественное ограничение на параметр типа

#c# #generics #type-constraints

#c# #общие положения #ограничения типа

Вопрос:

Я сделал это множественное ограничение

 public class BaseValidation<S, R> 
        where R : BaseRepository 
        where S : BaseService<R>, new()
    {
        public S service;

        public BaseValidation()
        {
            service = new S();
        }
    }
  

Вот класс BaseService

 public class BaseService<T> where T : BaseRepository, new(){ }
  

И когда я собираю, возникает ошибка, подобная этой…

‘R’ должен быть неабстрактным типом с общедоступным конструктором без параметров, чтобы использовать его в качестве параметра ‘T’ в универсальном типе

Как правильно это сделать? Спасибо.

Комментарии:

1. BaseService Есть ли конструктор без параметров?

Ответ №1:

Вам также необходимо добавить new() ограничение в R , поскольку T это ограничение содержится в определении BaseService<T> :

 public class BaseValidation<S, R> 
        where R : BaseRepository, new()
        where S : BaseService<R>, new()
{
    public S service;

    public BaseValidation()
    {
        service = new S();
    }
}
  

Если вам на самом деле не нужно это ограничение в BaseService<T> , просто удалите его.