using System.Collections.Generic;
public static void Main()
List<Shape> shapes = new List<Shape>();
Rectangle r = 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), 5));
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) : base(origin, width, height) {}
public override double CalculateArea()
public override double CalculatePerimeter()
return (Width + Height) * 2;
public override void Draw()
Console.WriteLine("Performing rectangle class drawing tasks");
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 CalculateArea()
return Base * Height / 2;
public override double CalculatePerimeter()
return SideALength + SideBLength + SideCLength;
public override void Draw()
Console.WriteLine("Performing triangle class drawing tasks");
public class Circle : Shape
public double Radius { get; set; }
public double Diameter { get; set; }
public Circle(Location origin, double radius)
public override double CalculateArea()
return Math.Pow(Radius, 2) * 3.14;
public override double CalculatePerimeter()
public override void Draw()
Console.WriteLine("Performing circle class drawing tasks");
public double CalculateCircumference()
return CalculatePerimeter();