ReSharper предлагает мне сделать параметр типа T контравариантным, изменив это:
interface IBusinessValidator<T> where T: IEntity
{
void Validate(T entity);
}
В это:
interface IBusinessValidator<in T> where T: IEntity
{
void Validate(T entity);
}
Так что же отличается от <T>
и <in T>
? И какова цель контравариантного здесь?
Скажем, у меня есть IEntity
, Entity
, User
и Account
сущности. Предполагая, что как User
, так и Account
имеют свойство Name
, которое необходимо проверить.
Как я могу применить использование контравариантного в этом примере?