下面就举个例子来说明封装、继承、多态:
这个例子的基类,就是上面描述概念的时候提到的形状,形状是基类,而这个基类是个抽象的概念,而不是具体的,因此是抽象类,此类包含属性形状名称、输出形状周长和面积的方法以及计算形状周长和面积的抽象方法:
/// <summary>
/// 形状基类
/// </summary>
public abstract class Shape
{
/// <summary>
/// 形状名称
/// </summary>
public string ShapeName { get; private set; }
public Shape(string shapeName)
{
ShapeName = shapeName;
}
/// <summary>
/// 输出形状周长
/// </summary>
public virtual void PrintPerimeter(double perimeter)
{
Console.WriteLine(ShapeName + " Perimeter: " + perimeter);
}
/// <summary>
/// 输出形状面积
/// </summary>
public virtual void PrintArea(double area)
{
Console.WriteLine(ShapeName + " Area: " + area);
}
/// <summary>
/// 计算形状周长
/// </summary>
/// <returns></returns>
public abstract double CalculatePerimeter();
/// <summary>
/// 计算形状面积
/// </summary>
/// <returns></returns>
public abstract double CalculateArea();
}
下面再来看具体的子类,子类是圆,包含属性半径、计算周长和面积的方法:
/// <summary>
/// 圆
/// </summary>
public class Circle : Shape
{
/// <summary>
/// 圆的半径
/// </summary>
public double R { get; set; }
public Circle()
: base("Circle")
{
this.R = 0;
}
/// <summary>
/// 圆的周长
/// </summary>
/// <returns></returns>
public override double CalculatePerimeter()
{
return 2 * Math.PI * R;
}
/// <summary>
/// 圆的面积
/// </summary>
/// <returns></returns>
public override double CalculateArea()
{
return Math.PI * R * R;
}
}
再来看看长方形,包含属性高度和宽度、计算周长和面积的方法:
public class Rectangle : Shape
{
/// <summary>
/// 长方形的长度
/// </summary>
public double Width { get; set; }
/// <summary>
/// 长方形的高度
/// </summary>
public double Height { get; set; }
public Rectangle()
: base("Rectangle")
{
Width = 0;
Height = 0;
}
/// <summary>
/// 长方形的周长
/// </summary>
/// <returns></returns>
public override double CalculatePerimeter()
{
return (Width + Height) * 2;
}
/// <summary>
/// 长方形的面积
/// </summary>
/// <returns></returns>
public override double CalculateArea()
{
return Width * Height;
}
}










