回顾:自定义列表
本课属于 Coddy C# 学习旅程的“面向对象编程”单元。第 40 课,共 70 课。
挑战
简单让我们构建一个 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# 在线编译器