Я пытаюсь научиться создавать общие классы с помощью C#. Может кто-нибудь объяснить, почему я получаю ошибку компиляции при запуске этой программы.C# generics with interfaces
Я создал интерфейс IZooAnimal. Все животные зоопарка будут реализовывать этот интерфейс.
public interface IZooAnimal
{
string Id { get; set; }
}
public class Lion : IZooAnimal
{
string Id { get; set; }
}
public class Zebra : IZooAnimal
{
public string Id { get; set; }
}
ZooCage будет держать животных одного и того же типа
public class ZooCage<T> where T : IZooAnimal
{
public IList<T> Animals { get; set; }
}
Класс зоопарка называемые клетки
public class Zoo
{
public IList<ZooCage<IZooAnimal>> ZooCages { get; set; }
}
Программа, которая использует классы
class Program
{
static void Main(string[] args)
{
var lion = new Lion();
var lionCage = new ZooCage<Lion>();
lionCage.Animals = new List<Lion>();
lionCage.Animals.Add(lion);
var zebra = new Zebra();
var zebraCage = new ZooCage<Zebra>();
zebraCage.Animals = new List<Zebra>();
zebraCage.Animals.Add(zebra);
var zoo = new Zoo();
zoo.ZooCages = new List<ZooCage<IZooAnimal>>();
zoo.ZooCages.Add(lionCage);
}
}
Когда я компиляция Я получаю follo ошибка крыла: Ошибка 2 Аргумент 1: не удается преобразовать из «ConsoleApplication2.ZooCage<ConsoleApplication2.Lion>
» в «ConsoleApplication2.ZooCage<ConsoleApplication2.IZooAnimal>
»
Какие изменения я должен сделать для того, чтобы моя программа работать?
Подробнее о ковариации и контравариантности ... возможно, начните [здесь] (http://stackoverflow.com/q/2033912/644812)? –