Tôi đang cố gắng tìm hiểu cách tạo các lớp chung với C#. Ai đó có thể giải thích lý do tại sao tôi nhận được một lỗi biên dịch khi tôi chạy chương trình này.C# generics với giao diện
Tôi đã tạo giao diện IZooAnimal. Tất cả động vật sở thú sẽ thực hiện giao diện này.
public interface IZooAnimal
{
string Id { get; set; }
}
public class Lion : IZooAnimal
{
string Id { get; set; }
}
public class Zebra : IZooAnimal
{
public string Id { get; set; }
}
Các ZooCage sẽ tổ chức động vật của cùng một loại
public class ZooCage<T> where T : IZooAnimal
{
public IList<T> Animals { get; set; }
}
Lớp thú có lồng
public class Zoo
{
public IList<ZooCage<IZooAnimal>> ZooCages { get; set; }
}
Chương trình có sử dụng các lớp
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);
}
}
Khi tôi biên dịch tôi nhận được follo lỗi cánh: Lỗi 2 Đối số 1: không thể chuyển đổi từ 'ConsoleApplication2.ZooCage<ConsoleApplication2.Lion>
' thành 'ConsoleApplication2.ZooCage<ConsoleApplication2.IZooAnimal>
'
Tôi phải làm gì để làm cho chương trình của mình chạy?
Đọc về hiệp phương sai và contravariance ... có thể bắt đầu [ở đây] (http://stackoverflow.com/q/2033912/644812)? –