协变与逆变

  协变与逆变是.NET 4.O 的新特性,协变和逆变允许数组类型、委托类型和泛型类型参数进行隐式引用转换。 协变保留分配兼容性,逆变与之相反.

  一.协变

   1.介绍概念之前,先看个例子  

    /// <summary>
/// 在.NET 4.0之前编译报错
/// </summary>
class Program
{
public abstract class Person { public string Name { get; set; } }
public class Student : Person {}
public class Teacher : Person { }

static void Main()
{
Student student = new Student();
Person person = student;// 这里,基类指向子类的引用,编译通过
IEnumerable<Student> students = null;
IEnumerable<Person> persons = students;//这里 编译报错
}
}

    在.NET 4.0 赋值操作是有效的,这是因为IEnumerable<T>的定义发生了变化:查看原文

posted @ 2012-04-03 02:31  _小阳  阅读(305)  评论(0编辑  收藏  举报