// 定义基类 Shape
class Shape
{
protected string color; // 颜色
protected double length; // 边长
protected double radius; // 半径
// 构造函数
public Shape(string color, double length, double radius)
{
this.color = color;
this.length = length;
this.radius = radius;
}
// 获取颜色
public string GetColor()
{
return color;
}
// 计算周长
public virtual double GetPerimeter()
{
return 0;
}
// 计算面积
public virtual double GetArea()
{
return 0;
}
}
// 定义子类 Circle
class Circle : Shape
{
// 构造函数
public Circle(string color, double radius) : base(color, 0, radius)
{
}
// 计算周长
public override double GetPerimeter()
{
return 2 * Math.PI * radius;
}
// 计算面积
public override double GetArea()
{
return Math.PI * radius * radius;
}
}
// 定义子类 Square
class Square : Shape
{
// 构造函数
public Square(string color, double length) : base(color, length, 0)
{
}
// 计算周长
public override double GetPerimeter()
{
return 4 * length;
}
// 计算面积
public override double GetArea()
{
return length * length;
}
}
// 定义子类 Triangle
class Triangle : Shape
{
// 构造函数
public Triangle(string color, double length) : base(color, length, 0)
{
}
// 计算周长
public override double GetPerimeter()
{
return 3 * length;
}
// 计算面积
public override double GetArea()
{
return Math.Sqrt(3) / 4 * length * length;
}
}
// 测试代码
class Test
{
static void Main(string[] args)
{
// 创建对象
Circle circle = new Circle("red", 5);
Square square = new Square("green", 6);
Triangle triangle = new Triangle("blue", 7);
// 输出
Console.WriteLine("Circle: color={0}, shape=circle, perimeter={1}, area={2}", circle.GetColor(), circle.GetPerimeter(), circle.GetArea());
Console.WriteLine("Square: color={0}, shape=square, perimeter={1}, area={2}", square.GetColor(), square.GetPerimeter(), square.GetArea());
Console.WriteLine("Triangle: color={0}, shape=triangle, perimeter={1}, area={2}", triangle.GetColor(), triangle.GetPerimeter(), triangle.GetArea());
}
}
输出结果如下:
Circle: color=red, shape=circle, perimeter=31.41592653589793, area=78.53981633974483
Square: color=green, shape=square, perimeter=24, area=36
Triangle: color=blue, shape=triangle, perimeter=21, area=21.217622392718745
注意:基类 Shape 中的周长和面积都定义为虚函数,是因为不同的子类计算方法不同,需要通过子类的重写来实现具体的计算逻辑。