Проблема:
interface ICovariant<out R>
{
// The following statement generates a compiler error
// because you can use only contravariant or invariant types
// in generic constraints.
// void DoSomething<T>() where T : R;
}
Почему общее ограничение на методы в этом случае не допускается.
РЕДАКТИРОВАТЬ: Лол, я нашел ответ, универсальный тип T в методе на самом деле является аргументом (или входом) и, следовательно, не является ковариантным.
R
является ковариантным,ICovariant<string> cs = default; ICovariant<object> co = cs;
является допустимым, что позволяетcs.DoSomething<FileInfo>();
нарушить ограничение. - person Aluan Haddad   schedule 12.09.2020R
будет другим универсальным типом (который не ограничен), и вы получите предупреждение о том, что он имеет то же имя, что и другойR
. - person 41686d6564   schedule 12.09.2020