Using generic method with an interface as a C# with Example
constraint type This is an example of how to use the generic type TFood inside Eat method on the class Animal public interface IFood { void EatenBy(Animal animal); } public class Grass: IFood { public void EatenBy(Animal animal) { Console.WriteLine("Grass was eaten by: {0}", animal.Name); } } public class Animal { public string Name { get; set; } public void Eat(TFood food) where TFood : IFood { food.EatenBy(this); } } public class Carnivore : Animal { public Carnivore() { Name = "Carnivore"; } } public class Herbivore : Animal, IFood { public Herbivore() { Name = "Herbivore"; } public void EatenBy(Animal animal) { Console.WriteLine("Herbivore was eaten by: {0}", animal.Name); } } You can call the Eat method like this: var grass = new Grass(); var sheep = new Herbivore(); var lion = new Carnivore(); sheep.Eat(grass); //Output: Grass was eaten by: Herbivore lion.Eat(sheep); //Output: Herbivore was eaten by: Carnivore In this case if you try to call: sheep.Eat(lion); It won't be possible because the object lion does not implement the interface IFood. Attempting to make the above call will generate a compiler error: "The type 'Carnivore' cannot be used as type parameter 'TFood' in the generic type or method 'Animal.Eat(TFood)'. There is no implicit reference conversion from 'Carnivore' to 'IFood'."