Generic variance: covariance (out), contravariance (in), invariance.
- Covariance (out): T sadece return type - IProducer → IProducer
- Contravariance (in): T sadece parameter - IConsumer → IConsumer
- Invariance: T hem input hem output - no conversion
cd samples/02-Intermediate/CovarianceContravariance
dotnet run// Covariance
public interface IProducer<out T> {
T Produce();
}
IProducer<Dog> → IProducer<Animal> // ✅
// Contravariance
public interface IConsumer<in T> {
void Consume(T item);
}
IConsumer<Animal> → IConsumer<Dog> // ✅- out: T only in return positions
- in: T only in parameter positions
- Neither: Invariant