C# でジェネリック クラスを作成する方法を学習しようとしています。このプログラムを実行するとコンパイルエラーが発生する理由を誰か説明できますか?
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);
}
}
コンパイルすると、次のエラーが表示されます: エラー 2 引数 1: ' ConsoleApplication2.ZooCage<ConsoleApplication2.Lion>
'から ' ConsoleApplication2.ZooCage<ConsoleApplication2.IZooAnimal>
' に変換できません
プログラムを実行するには、どのような変更を行う必要がありますか?