using System.Collections.Generic;
public static void Main()
List<Shape> shapes = new List<Shape>();
shapes.Add(new Rectangle(new Location(1, 1), 4, 5));
shapes.Add(new Triangle(new Location(1, 1), 3, 4, 3, 4, 5));
shapes.Add(new Circle(new Location(1, 1), 2));
foreach (Shape s in shapes)
Console.WriteLine("Area = " + s.CalculateArea().ToString("F2"));
Console.WriteLine("Perimeter = " + s.CalculatePerimeter().ToString("F2"));
public double X { get; set; }
public double Y { get; set; }
public Location(double x, double y)
public class Location3D : Location
public double Z { get; set; }
public Location3D(double x, double y, double z) : base(x, y)
public Location Origin { get; set; }
public double Width { get; set; }
public double Height { get; set; }
public virtual int NumberOfSides
public Shape(Location origin, double width, double height)
public virtual double CalculateArea()
public virtual double CalculatePerimeter()
public virtual void Draw()
Console.WriteLine("Performing base class drawing tasks");
public class Rectangle: Shape
public override int NumberOfSides { get { return 4;} }
public Rectangle(Location origin, double width, double height)
public override double CalculateArea()
public override double CalculatePerimeter()
return (2 * Width) + (2 * Height);
public override void Draw()
Console.WriteLine("Drawing a Rectangle!");
public class Triangle: Shape
public override int NumberOfSides { get {return 3;} }
public double Base {get; set;}
public double SideALength { get; set; }
public double SideBLength { get; set; }
public double SideCLength { get; set; }
public Triangle(Location origin, double theBase, double height, double sideALength, double sideBLength, double sideCLength)
SideALength = sideALength;
SideBLength = sideBLength;
SideCLength = sideCLength;
public override double CalculatePerimeter()
return SideALength + SideBLength + SideCLength;
public override double CalculateArea()
return (.5 * Base) * Height;
public override void Draw()
Console.WriteLine("Drawing a Triangle!");
public class Circle: Shape {
public override int NumberOfSides { get { return 0;} }
public double Radius { get ; set; }
public Circle(Location origin, double r) {
public override double CalculatePerimeter() {
return 2 * Math.PI * Radius;
public override double CalculateArea() {
double pirad = Math.PI * Radius;
return Math.Pow(pirad, 2);
public override void Draw() {
Console.WriteLine("Drawing a Circle!");