ISoundMaker<in T> with a method MakeSound(T animal).Animal and Dog, where Dog inherits from Animal.ISoundMaker<Animal> in a class called AnimalSoundMaker.ISoundMaker<Animal> can be assigned to an ISoundMaker<Dog> variable because of contravariance.MakeSound method on the ISoundMaker<Dog> variable with a Dog instance.