Entity_Framework-协变和逆变的概念

             //协变和逆变都是在泛型中使用的。原则:更安全的使用泛型集合(约束不报错)
            //编译不报错,内部进行转换,补全代码-----------------------------------------本质(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
发布了83 篇原创文章 · 获赞 11 · 访问量 1万+

猜你喜欢

转载自blog.csdn.net/MrLsss/article/details/104659454
今日推荐