In programming languages, the ability to use a less derived type than that originally specified. Contravariance in generic interfaces and delegates allows for implicit conversion of generic type parameters. Contravariance is also supported for nongeneric delegates for matching method signatures with delegate types.