Menu
CoddyTech

回顾:自定义列表

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

challenge icon

挑战

简单

让我们构建一个 CustomList 类,整合本章介绍的所有高级功能:运算符重载、索引器、重写 ToString() 和扩展方法,从而创建一个使用起来直观自然的集合。

你需要将代码分布在三个文件中:

  • CustomList.cs:在 Collections 命名空间中创建一个 CustomList 类,用它封装一个内部整数数组,并提供直观的访问方式。你的列表应包含:
    • 一个用于存储项目的私有整数数组,以及一个用于记录已存储项目数量的 Count 属性(setter 为 private)
    • 一个接受容量(整数)并将内部数组初始化为该大小的构造函数
    • 一个 Add(int item) 方法,用于将项目添加到下一个可用位置(如果还有空间)
    • 一个 this[int index] 索引器,用于按位置获取和设置项目
    • 一个重载的 + 运算符,用于将两个 CustomList 合并为一个新列表,其中包含两个列表的所有项目(新列表的容量应为两个列表的 Count 之和)
    • 一个重写的 ToString() 方法,以 [item1, item2, item3] 格式返回项目,只包含到 Count 为止的项目,不包含空槽位
  • ListExtensions.cs:在 Collections 命名空间中创建一个静态类 ListExtensions,并为你的 CustomList 编写一个扩展方法:
    • Sum():返回列表中所有项目的总和(计算到 Count 为止)
  • Program.cs:在主文件中创建两个 CustomList,分别向其中添加项目,然后演示所有功能如何协同工作:使用索引器访问项目,使用 + 运算符合并列表,使用 ToString() 打印内容,并使用扩展方法计算总和。

你将收到 6 个输入:

  • 3 个要添加到第一个列表的整数
  • 3 个要添加到第二个列表的整数

将第一个列表的容量设为 5,第二个列表的容量设为 3。分别将三个输入值添加到对应的列表中。

按以下格式输出:

List 1: {ToString()}
List 2: {ToString()}
List 1[0]: {first item}
Combined: {ToString() of combined list}
Combined sum: {Sum()}

例如,如果输入为 10、20、30、5、15 和 25,输出应为:

List 1: [10, 20, 30]
List 2: [5, 15, 25]
List 1[0]: 10
Combined: [10, 20, 30, 5, 15, 25]
Combined sum: 105

注意这些功能如何协同工作:索引器让你像访问数组一样访问项目,+ 运算符让你自然地合并列表,ToString() 提供易读的输出,而扩展方法则增加了实用功能。这就是设计良好的类带给人的体验!

亲手试试

using System;
using Collections;

class Program
{
    public static void Main(string[] args)
    {
        // 读取 6 个整数
        int a1 = Convert.ToInt32(Console.ReadLine());
        int a2 = Convert.ToInt32(Console.ReadLine());
        int a3 = Convert.ToInt32(Console.ReadLine());
        int b1 = Convert.ToInt32(Console.ReadLine());
        int b2 = Convert.ToInt32(Console.ReadLine());
        int b3 = Convert.ToInt32(Console.ReadLine());

        // TODO:创建第一个容量为 5 的 CustomList
        // TODO:将 a1、a2、a3 添加到第一个列表

        // TODO:创建第二个容量为 3 的 CustomList
        // TODO:将 b1、b2、b3 添加到第二个列表

        // TODO:使用 ToString() 输出列表 1
        // TODO:使用 ToString() 输出列表 2
        // TODO:使用索引器输出列表 1[0]
        // TODO:使用 + 运算符合并列表并输出结果
        // TODO:使用 Sum() 扩展方法输出合并后列表的总和
    }
}

面向对象编程中的所有课

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