#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>
, просто удалите его.