If the type T is marked as "out" in a generic interface, then that means the interface will only output T. It doesnot have any method that takes T as an input. An example of a Covariant interface in .net is IEnumerable<T>. This interface is defined as
What this practically means is that, in place of T, you can give it a child class of T.
For example if its expecting a List of objects you can give a List of strings.
This is the opposite of Covariance. If a type T is marked "in" in a generic interface, then that means that the interface has methods that accept T as an input and no methods in this interface output T. In the .net framework IComparer<T> is contravariant.
In place of T you can give it a Parent of T.