point/cloneable-vs-copy-constructor/AlternativeClient.cs - Non-polymorphic Cloning of Points - with use of copy constructors. | Lecture 8 - slide 32 : 41 Program 4 |
using System; using System.Drawing; using System.Collections.Generic; public class Application{ public static void Main(){ Point p1 = new Point(1.1, 2.2), p2 = new Point(3.3, 4.4); ColorPoint cp1 = new ColorPoint(5.5, 6.6, Color.Red), cp2 = new ColorPoint(7.7, 8.8, Color.Blue); List<Point> pointList = new List<Point>(), clonedPointList = new List<Point>(); pointList.Add(p1); pointList.Add(cp1); pointList.Add(p2); pointList.Add(cp2); // Cannot copy ColorPoint objects with copy constructor of Point. // Compiles and runs, but gives wrong result. // foreach(Point p in pointList){ // clonedPointList.Add(new Point(p)); // } // Explicit type dispatch: foreach(Point p in pointList){ if (p is ColorPoint) clonedPointList.Add(new ColorPoint((ColorPoint)p)); else if (p is Point) clonedPointList.Add(new Point(p)); } foreach(Point p in clonedPointList) Console.WriteLine("{0}", p); } }