Variant types as parameters and return values
suggest changeIf a covariant type appears as an output, the containing type is covariant. Producing a producer of T
s is like producing T
s.
interface IReturnCovariant<out T>
{
IEnumerable<T> GetTs();
}
If a contravariant type appears as an output, the containing type is contravariant. Producing a consumer of T
s is like consuming T
s.
interface IReturnContravariant<in T>
{
IComparer<T> GetTComparer();
}
If a covariant type appears as an input, the containing type is contravariant. Consuming a producer of T
s is like consuming T
s.
interface IAcceptCovariant<in T>
{
void ProcessTs(IEnumerable<T> ts);
}
If a contravariant type appears as an input, the containing type is covariant. Consuming a consumer of T
s is like producing T
s.
interface IAcceptContravariant<out T>
{
void CompareTs(IComparer<T> tComparer);
}
Found a mistake? Have a question or improvement idea?
Let me know.
Table Of Contents