у меня есть базовый универсальный класс, который выглядит примерно так:Наследование и расширение ограничений в дженериков
public abstract class BaseTestDataEntity<T>
where T : IIdEntity, ICodeEntity, IActiveEntity, new()
{
}
Эти интерфейсы представляют собой поля в entities.This данных очень полезно, потому что с помощью этих интерфейсов можно написать общие базовые классы который может иметь такие методы, как «Добавить», «Обновить» и т. д.
Но что действительно полезно, это полная поддержка времени разработки, основанная на контрактах на интерфейсах.
Пример экземпляра:
public class Customer : BaseTestDataEntity<Customer>
{}
Теперь у меня есть ситуация, в которой я хотел бы создать производный класс BaseTestDataEntity, который будет включать в себя все ограничения базы (так в коде, T должен иметь идентификатор, код и активный флаг)
Однако в производном классе я хочу добавить дополнительные ограничения.
Таким образом, мне не нужно дублировать конкретные методы в BaseTestDataEntity.
То, что я пытался и то, что я хочу сделать:
public class BaseTestDataEntityImpl<T>
: BaseTestDataEntity<T> where T : IIdEntity, ICodeEntity, IMultiTextEntity, IActiveEntity, new()
{
// This should enforce T constaints in the base class, but where do I put in new constraints in the derived T?
}