From Wikipedia:
covariant: converting from wider (double) to narrower (float).
contravariant: converting from narrower (float) to wider (double).
In .NET, a delegate has covariance because it allows for derived types of the delegate's specified return type to be the return type of a method that it holds a reference to.
As well a delegate has contravariance because it allows for derived types of the delegate's specified arguments (parameters) to be the argument type passed into the method that it holds a reference to.
With these two definitions as they pertain to delegates, shouldn't they both be covariance? In both cases, the delegate expects a "wider" type, but is given a "narrower type".
See here for an example of both from MSDN.
So how does the word contravariance make sense, linguistically, when pertaining to delegates?