namespace 协变
{
public class Animal
{
public string name;
public Animal(string name1)
{
name = name1;
}
}
public class dog : Animal
{
public dog(string name1):base(name1)
{
}
}
class Program
{
static void Main(string[] args)
{
List<dog> someDog = new List<dog>();
someDog.Add( new dog("wangcai1"));
someDog.Add(new dog("wangcai2"));
someDog.Add(new dog("wangcai3"));
// List<Animal> animals = someDog; 这样会编译错误
IEnumerable<dog> dogs = someDog;
IEnumerable<Animal> animals = dogs;
IEnumerable<Animal> animals2 = someDog;
foreach( var temp in animals2)
{
Console.WriteLine(temp.name);
}
Console.WriteLine($"{"###",10}");
foreach ( var temp in animals)
{
Console.WriteLine(temp.name);
}
///
Console.ReadKey();
}
}
}
协变: 在使用一般类型的地方,可以传入一个特殊类型的对象,返回值通常用作。
逆变: 在一个使用特殊的类型的地方,可以传入一班类型的对象。