Menu
CoddyTech

复习:形状计算器

本课属于 Coddy C# 学习旅程的“面向对象编程”单元。第 30 课,共 70 课。

challenge icon

挑战

简单

我们来构建一个图形计算器,把你学过的接口和多态知识结合起来。你将创建一个系统,通过通用接口统一处理不同的图形,展示运行时多态的强大之处。

你需要把代码组织到 4 个文件中:

  • IShape.cs:在 Shapes 命名空间中定义一个名为 IShape 的接口。每种图形都必须能够计算面积并描述自身。声明两个方法:CalculateArea(),返回 double;以及 GetDescription(),返回 string。
  • Circle.cs:在 Shapes 命名空间中创建一个实现 IShape 的 Circle 类。圆有一个 Radius 属性(类型为 double),通过构造函数设置。面积公式是 Math.PI * Radius * Radius。描述应返回 "Circle with radius {Radius}"。
  • Rectangle.cs:在 Shapes 命名空间中创建一个实现 IShape 的 Rectangle 类。矩形有 Width 和 Height 两个属性(类型都为 double),通过构造函数设置。面积就是宽乘以高。描述应返回 "Rectangle {Width}x{Height}"。
  • Program.cs:在主文件中,使用输入值创建一个圆和一个矩形,然后将它们存储在一个由 IShape 引用组成的数组中。遍历数组,对每个图形,先输出描述,再输出四舍五入到小数点后两位的面积。这展示了你如何通过同一个接口处理完全不同的图形!

你将收到 3 个输入:

  • 圆的半径(double)
  • 矩形的宽度(double)
  • 矩形的高度(double)

每个图形的输出格式如下:

{GetDescription() result}
Area: {CalculateArea() rounded to 2 decimal places}

例如,如果输入是 5、4 和 6,输出应为:

Circle with radius 5
Area: 78.54
Rectangle 4x6
Area: 24.00

注意,循环不需要知道当前处理的是圆还是矩形,只需调用接口方法,其余部分交给多态处理即可。这就是面向接口编程的优雅之处!

亲手试试

using System;
using Shapes;

class Program
{
    public static void Main(string[] args)
    {
        // 读取输入值
        double circleRadius = Convert.ToDouble(Console.ReadLine());
        double rectWidth = Convert.ToDouble(Console.ReadLine());
        double rectHeight = Convert.ToDouble(Console.ReadLine());
        
        // TODO: 用给定的半径创建一个 Circle 对象
        
        // TODO: 用给定的宽度和高度创建一个 Rectangle 对象
        
        // TODO: 创建一个包含这两种形状的 IShape 数组
        
        // TODO: 遍历数组,对每个形状执行以下操作:
        // - 使用 GetDescription() 输出描述
        // - 输出 "Area: ",然后输出 CalculateArea() 的结果,保留 2 位小数
    }
}

面向对象编程中的所有课

自己练习: C# 在线编译器