/*
* Created by SharpDevelop.
* User: Administrator
* Date: 2010-12-17
* Time: 23:23
*
* To change this template use Tools | Options | Coding | Edit Standard Headers.
*/
using System;
using Microsoft;
namespace helloword
{
    class dimesions
    {
    protected double x,y;
    public const double PI=Math.PI;
        public dimesions(){}
        public dimesions(double x,double y)
        {
            this.x=x;
            this.y=y;
        }
        //面积接口,不同的图形公式不同,默认为x*y
        public virtual double area()
        {
            Console.WriteLine("面积函数,未被重写!");
            return 0;
        }
        public virtual double girth()
        {
            Console.WriteLine("周长函数,未被重写!");
            return 0;
        }
    }
    class circle:dimesions
    {
        public circle(double r):base(r,0)
        {
            Console.WriteLine("构造圆!");
        }
        public override double area()
        {
            Console.WriteLine("圆的面积!");
            return PI*x*x;
        }
        public override double girth()
        {
            Console.WriteLine("圆的周长!");
            return 2*PI*x;
        }
    }
    class square:dimesions
    {
        public square(double a):base(a,a)
        {
            Console.WriteLine("构造正方形!");
        }
        public override double area()
        {
            Console.WriteLine("正方形的面积!");
            return x*x;
        }
        public override double girth()
        {
            Console.WriteLine("正方形的周长!");
            return 4*x;
        }
    }
    class rectangle:dimesions
    {
        public rectangle(double a,double b):base(a,b)
        {
            Console.WriteLine("构造长方形!");
        }
        public double area()
        {
            Console.WriteLine("长方形的面积!");
            return x*y;
        }
        public override double girth()
        {
            Console.WriteLine("长方形的周长!");
            return 2*(x+y);
        }
    }
    class Program
    {
        public static void Main(string[] args)
        {
            circle c=new circle(4);
            square s=new square(5);
            rectangle r=new rectangle(3,4);
            Console.WriteLine("{0:F3}",c.area());//F控制小数位数
            Console.WriteLine("{0:F3}",c.girth());
            Console.WriteLine("{0:F3}",s.area());
            Console.WriteLine("{0:F3}",s.girth());
            Console.WriteLine("{0:F3}",r.area());
            Console.WriteLine("{0:F3}",r.girth());
            Console.WriteLine("Hello World!");
            Console.ReadKey(true);
        }
    }
}