C练习题List
目录
C#练习题——List
一、任务一:建立一个整形List,为它添加10~1
实现目标:
(1)删除List中第五个元素
(2)遍历剩余元素并打印
二、代码解析
1. 创建列表
List<int> list1 = new List<int>();
(1)创建一个名为list1
的整型列表
(2)List<int>
是泛型集合,只能存储指定类型(此处为int)的元素
2. 添加元素
for (int i = 10; i > 0; i--)
{
list1.Add(i);
}
(1)使用Add()
方法向列表末尾添加元素
(2)循环从10递减到1,因此元素添加顺序为:10, 9, 8, …, 1
3. 移除元素
list1.RemoveAt(4);
(1)RemoveAt(4)
移除索引位置为4的元素(即第5个元素,因为索引从0开始)
(2)在移除前,列表元素为:[10, 9, 8, 7, 6, 5, 4, 3, 2, 1]
索引4对应的元素是数字6
4. 遍历列表
foreach (int item in list1)
{
Console.WriteLine(item);
}
(1)使用foreach
循环遍历列表中的每个元素
(2)这是一种安全且高效的遍历方式
三、完整代码
using System;
using System.Collections;
using System.Collections.Generic;
using System.Diagnostics;
using System.Threading.Tasks;
using System.Xml.Linq;
namespace 进阶测试
{
class Program
{
static void Main(string[] args)
{
List<int> list1 = new List<int>();
for (int i = 10; i >0 ; i--)
{
list1.Add(i);
}
list1.RemoveAt(4);
foreach (int item in list1)
{
Console.WriteLine(item);
}
}
}
}
四、任务二:创建一个Monster基类,Boss和Gablin类继承它
实现目标:
(1)在怪物类的构造函数中,将其存储到一个怪物List中
(2)遍历列表可以让Boss和Gablin对象产生不同攻击
五、核心概念解析
1. 抽象类 (Abstract Class)
abstract class Monster
{
public abstract void Attack(); // 抽象方法,无实现
}
作用:作为基类,定义通用接口但不能被实例化
特点:可以包含抽象方法和具体实现的方法
2. 多态性 (Polymorphism)
// 多态调用示例
Monster monster = new Boss();
monster.Attack(); // 实际调用Boss的Attack方法
实现方式:通过虚方法(virtual)和重写(override)
优点:提高代码的扩展性和可维护性
3. 静态成员 (Static Member)
public static List<Monster> list = new List<Monster>();
特点:所有实例共享同一个静态成员
用途:实现全局数据存储和共享
4. 集合操作
// 自动注册模式
public Monster()
{
list.Add(this); // 构造函数中自动添加
}
设计模式:自注册模式(Self-registration pattern)
优点:简化对象管理,避免手动注册
六、完整代码
using System;
using System.Collections.Generic;
namespace MonsterManagementSystem
{
/// <summary>
/// 抽象怪物基类
/// </summary>
abstract class Monster
{
// 静态列表,自动记录所有创建的怪物实例
public static List<Monster> list = new List<Monster>();
/// <summary>
/// 构造函数,自动将新创建的怪物添加到静态列表中
/// </summary>
public Monster()
{
list.Add(this);
Console.WriteLine($"怪物已创建并添加到列表,当前总数:{list.Count}");
}
/// <summary>
/// 显示所有怪物信息
/// </summary>
public void ShowAllMonsters()
{
Console.WriteLine("\n=== 所有怪物列表 ===");
for (int i = 0; i < list.Count; i++)
{
// 使用GetType()获取实际类型信息
Console.WriteLine($"{i + 1}. {list[i].GetType().Name}");
}
Console.WriteLine("====================\n");
}
/// <summary>
/// 抽象攻击方法,由子类实现具体攻击行为
/// </summary>
public abstract void Attack();
}
/// <summary>
/// Boss类 - 具体怪物类型
/// </summary>
class Boss : Monster
{
public override void Attack()
{
Console.WriteLine("Boss发动强力攻击!💥");
}
}
/// <summary>
/// Gablin类 - 具体怪物类型(哥布林)
/// </summary>
class Gablin : Monster
{
public override void Attack()
{
Console.WriteLine("Gablin进行快速攻击!⚔️");
}
}
class Program
{
static void Main(string[] args)
{
Console.WriteLine("=== 怪物管理系统启动 ===\n");
// 创建怪物实例
Boss boss1 = new Boss();
Gablin gablin1 = new Gablin();
Boss boss2 = new Boss();
Gablin gablin2 = new Gablin();
Console.WriteLine("\n=== 怪物攻击演示 ===");
// 多态性演示:通过基类引用调用子类方法
boss1.Attack();
boss2.Attack();
gablin1.Attack();
gablin2.Attack();
Console.WriteLine("\n=== 显示所有怪物 ===");
// 显示所有已创建的怪物
boss1.ShowAllMonsters();
// 额外演示:使用多态性遍历所有怪物
Console.WriteLine("=== 所有怪物同时攻击 ===");
foreach (Monster monster in Monster.list)
{
monster.Attack(); // 多态调用
}
Console.WriteLine("\n=== 程序结束 ===");
Console.ReadKey();
}
}
}