using System;

namespace testClassApp
{
 /// <summary>
 /// Class1 的摘要说明。
 /// </summary>
 class Class1
 {
  /// <summary>
  /// 应用程序的主入口点。
  /// </summary>
  [STAThread]
  static void Main(string[] args)
  {
  //
  // TODO: 在此处添加代码以启动应用程序
  //

  double len = 2.5;
  double wid = 3.0;
  double rad = 4.1;
  Rectangle aRect = new Rectangle();
  aRect.length = len;
  aRect.width = wid;
  Circle aCirc = new Circle (rad);
  Console.WriteLine ("Area of Rect is:{0}",aRect.Area ());
  Console.WriteLine ("Area of Circ is:{0}",aCirc.Area ());
  }
 }

 abstract class Shape //抽象基类,不可实例化
 {
  public const double pi=3.14; //常量
  protected double x, y; //私有,可继承变量

  public Shape() //默认构造函数
  {
  x=y=0;
  }
  public Shape(double x,double y) //带参数构造函数
  {
  this.x = x;
  this.y = y;
  }
  public abstract double Area(); //抽象方法,需重载
 }

 class Rectangle: Shape
 {
  public Rectangle():base(){}
  public Rectangle(double x, double y): base(x,y){}//使用基类构造函数
  public override double Area() //函数重载
  {
  return (x*y);
  }
  public double length //属性:矩形长度
  {
  get
  {
  return x;
  }
  set
  {
  if (value>0){x = value;}
  }
  }
  public double width //属性:矩形宽度
  {
  get
  {
  return y;
  }
  set
  {
  if (value>0){y = value;}
  }
  }

 }

 class Ellipse: Shape
 {
  public Ellipse(double x, double y):base(x,y){}//使用基类Shape的构造函数
  public override double Area() //函数重载
  {
  return pi*x*y;
  }
 }
 class Circle: Ellipse
 {
  public Circle(double r):base(r,0){} //使用基类Ellipse的构造函数
  public override double Area() //函数重载
  {
  return pi*x*x;
  }
 }

 
}