私は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 Zoo
{
public IList<ZooCage<IZooAnimal>> ZooCages { get; set; }
}
I
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);
}
}
クラスを使用するプログラムを持っている動物園のクラスと同じタイプ
public class ZooCage<T> where T : IZooAnimal
{
public IList<T> Animals { get; set; }
}
の動物を開催しますコンパイル私はfolloを取得する翼のエラー: エラー2引数1:「ConsoleApplication2.ZooCage<ConsoleApplication2.IZooAnimal>
」から「ConsoleApplication2.ZooCage<ConsoleApplication2.Lion>
」から変換することはできません
私は私のプログラムを実行させるために行うにはどのような変更がありますか?
共分散と反動については、こちらをご覧ください(http://stackoverflow.com/q/2033912/644812)。 –