//协变和逆变都是在泛型中使用的。原则:更安全的使用泛型集合(约束不报错)
//编译不报错,内部进行转换,补全代码-----------------------------------------本质(object)
//逆变与协变只能放在泛型接口和泛型委托的泛型参数里面,
//在泛型中out修饰泛型称为协变,协变(covariant) 修饰返回值 ,协变的原理是把子类指向父类的关系,拿到泛型中。
//在泛型中in 修饰泛型称为逆变, 逆变(contravariant )修饰传入参数,逆变的原理是把父类指向子类的关系,拿到泛型中。
#region 协变(子类集合(套用)赋值父类集合)
//协变:把子类集合赋值给父类集合(原则:更安全的使用集合)
//1.
//List<int> vs = new List<int>();
//List<object> ob = vs;//把子类集合赋值给父类集合
//2.
//IQueryable<object> temp = from u in newsEntities.NewsListTable where u.NewsId > 5 select u;//父类集合接收
//IQueryable<NewsListTable> temp = from u in newsEntities.NewsListTable where u.NewsId > 5 select u;//子类接收
#endregion
//把子类赋值给父类,用此实例也只能访问父类的属性和方法---------------安全
#region 逆变(把父类集合赋值给子类集合)
Action<object> obj = (target) => { Console.WriteLine(target.GetType().Name); };
Action<NewsListTable> action = obj;//把子类赋值给父类
action(new NewsListTable());//最终执行的还是父类方法
#endregion
Entity_Framework-协变和逆变的概念
最新推荐文章于 2020-12-16 08:51:21 发布