abstract class GeometricObject{
public abstract double calculateArea();
public abstract double calculatePerimeter();
class Octagon : GeometricObject , ICloneable,IComparable<Octagon>
public Octagon(int side){
public override double calculateArea(){
area = (2 + 4 / Math.Sqrt(2)) * side * side;
public override double calculatePerimeter(){
return new Octagon(side);
public int CompareTo(Octagon other)
if (this.side == other.side)
public static void Main(){
Octagon octogan = new Octagon();
Console.WriteLine(" Area of Octogan is {0} ", octogan.calculateArea().ToString("0.##"));
Console.WriteLine(" PErimeter of Octogan is {0} ", octogan.calculatePerimeter());
Octagon octoganloned = octogan.Clone() as Octagon;
Console.WriteLine(" Side is {0} ", octoganloned.side);
if(octogan.CompareTo(octoganloned)==1)
Console.WriteLine(" Both objects are same");
Console.WriteLine(" Both objects are not same");