深入理解 c# 第十三章 根据圆形和方形列表构建一般形状的列表 在接口中使用可变性
    class ShapeCovariance
    {
        static void Main()//在接口中使用可变性  根据圆形和方形列表构建一般形状的列表 
        {
            List<IShape> shapesByAdding = new List<IShape>();
//Count = 0  直接在列表中添加			
            shapesByAdding.AddRange(Shapes.Circles);
            shapesByAdding.AddRange(Shapes.Squares);
//shapesByAdding Count = 4
            List<IShape> shapesByConcat = Shapes.Circles.Concat<IShape>(Shapes.Squares).ToList();
//shapesByAdding Count = 4			使用LINQ进行连接
        }
    }

    public static class Shapes
    {
        private static readonly List<Circle> circles = new List<Circle> {
            new Circle(new Point(0, 0), 15),
            new Circle(new Point(10, 5), 20),
        };

        private static readonly List<Square> squares = new List<Square> {
            new Square(new Point(5, 10), 5),
            new Square(new Point(-10, 0), 2)
        };

        public static List<Circle> Circles { get { return circles; } }
        public static List<Square> Squares { get { return squares; } }
    }	


 在泛型接口或委托的声明中,C#4能够使用out修饰符来指定类型参数的协变性,使用in修饰符
来指定逆变性。声明完成之后,就可以对相关的类型进行隐式转换了。
  基于圆形列表和方形列表来构建一个形状的列表。
  对于系统类型而言,每次将圆形或方形序列转换为普通几何形状时,都用到了协变性。首先新建
一个List<IShape>,并调用AddRange向其添加圆形和方形列表。也可以向构造函数传递一个列表,
然后调用AddRange一次。List<T>.AddRange的参数为IEnumerable<T>类型,因此在这种情况
下我们将这两个列表都看成是IEnumerable<IShape>,而这在以前是不被允许的。AddRange可以
设计为泛型方法,拥有自己的参数类型,但实际上没有这样做--这会导致某些优化难以甚至无法进行。
    
无输出

阅读更多
文章标签: c#
想对作者说点什么? 我来说一句

没有更多推荐了,返回首页

不良信息举报

深入理解 c# 第十三章 根据圆形和方形列表构建一般形状的列表 在接口中使用可变性

最多只允许输入30个字

加入CSDN,享受更精准的内容推荐,与500万程序员共同成长!
关闭
关闭