In this msdn documentation about covariance and contravariance it is explained that out keyword is used to declare a generic parameter covariant.
You can declare a generic type parameter covariant by using the out keyword.
Then is given an example of usage of the out keyword, and after that, this statement comes in which it is said about the delegate as a method parameter which is "contravariant", which I think should be called "covariant" because it is still marked with out :
There is one exception to this rule. If you have a contravariant generic delegate as a method parameter, you can use the type as a generic type parameter for the delegate.
Then this example follows:
interface ICovariant<out R>
{
void DoSomething(Action<R> callback);
}
Shouldn't be the delegate parameter called covariant instead contravariant?
Action<T>is contravariant; not covariant. - Servy