This question has already been answered:
using System; // Контрвариантность обобщений. // Контрвариантность обобщений в C# 4.0 ограничена делегатами. namespace Generics { class Animal { } class Cat : Animal { } class Program { delegate void MyDelegate<in T>(T a); // in - Для аргумента. public static void CatUser(Animal animal) { Console.WriteLine(animal.GetType().Name); } static void Main() { MyDelegate<Animal> delegateAnimal = new MyDelegate<Animal>(CatUser); //MyDelegate<Cat> delegateCat = delegateAnimal; MyDelegate<Cat> delegateCat=new MyDelegate<Animal>(CatUser); delegateAnimal(new Animal()); delegateCat(new Cat()); delegateAnimal(new Cat()); // delegateCat(new Animal()); // Невозможно. // Delay. Console.ReadKey(); } } }
why you cannot call delegateCat (new Animal ()); ? Thank you in advance