C#中使用list封装多个同类型对象以及组合拓展实体的应用

这篇具有很好参考价值的文章主要介绍了C#中使用list封装多个同类型对象以及组合拓展实体的应用。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

一、list使用方法

在C#中,使用List<T>集合是封装多个同类型对象的常用方式。List<T>是泛型集合,T是集合中元素的类型。下面是一个简单的例子,演示如何创建一个List<T>,并向其中添加对象。

首先,假设我们有一个类,比如一个Person类,它有一些属性:

public class Person
{
    public string Name { get; set; }
    public int Age { get; set; }
    
    // 假设还有其他属性和方法
}

然后,我们可以这样使用List<T>

using System;
using System.Collections.Generic;  // 确保引入了这个命名空间

public class Program
{
    public static void Main()
    {
        // 创建一个Person对象的List
        List<Person> people = new List<Person>();

        // 创建Person对象并添加到List中
        people.Add(new Person() { Name = "Alice", Age = 30 });
        people.Add(new Person() { Name = "Bob", Age = 25 });
        people.Add(new Person() { Name = "Charlie", Age = 35 });

        // 遍历List并打印每个Person对象的信息
        foreach (Person p in people)
        {
            Console.WriteLine($"Name: {p.Name}, Age: {p.Age}");
        }
    }
}

上面的代码首先导入了必要的命名空间System.Collections.Generic来使用List<T>。然后,创建了一个Person类型的List,并添加了几个Person对象到这个列表中。foreach循环被用来遍历这个列表并打印每个人的信息。

这样,我们就可以管理一个动态数组(列表)的同类型对象了,而且List<T>提供了许多方便的方法,如AddRemoveFind等,来操作集合中的元素。

二、C#组合拓展实体

在C#中,“组合”(Composition)通常是指一种设计模式,它表明一个类包含了一个或者多个其他类的实例来实现代码复用或者增加新的功能。这与"继承"不同,继承表示一个类是另一个类的子类。“拓展实体”(Extended Entities)一般指的是在组合模式中被用来拓展功能的那些包含的类的实例。 (定义有些复杂,不用管直接看例子也行)

组合被用于当我们想要将一些行为或者状态封装到一个单独的类中,并且希望通过含有这些类的实例的方式在多个地方重用它们。这通常是在希望建立一个对象,其行为是由多个源对象组成的时候,比如在创建一个复杂对象时,这个对象的功能需要来自于多个不同的源对象。

具体例子如下:

设想我们正在构建一个游戏,有一个Weapon类(武器)和一个Character类(人物)。在这个游戏中,每个角色可以拥有不同的武器。在这里,Weapon是一个可以被组合到Character中的实体。

首先,定义一个Weapon类:

public class Weapon //这个类代表游戏中的武器,它有两个公共属性和一个构造函数,以及一个用于执行攻击动作的方法
{
//这是两个公开属性
    public string Name { get; set; }  //武器的名称
    public int Damage { get; set; }   //使用这个武器进行攻击时造成的伤害
//构造函数,用来创建weapon类的新实例,就是说我们创建Weapon类的时候,要提供Name和Damage来初始化对象
    public Weapon(string name, int damage)
    {
        Name = name;
        Damage = damage;
    }
//一个不返回任何值的方法,调用这个方法后,会显示武器的名称和攻击造成的伤害
    public void Attack()
    {
        Console.WriteLine($"{Name} attacks for {Damage} damage!");
        //在这个字符串中,{Name}和{Damage}是插值表达式,它们会被替换为对象当前的Name和Damage属性的值。
    }
}

然后,定义一个Character类,并在其中组合Weapon

public class Character     //这个是游戏中的角色,并演示了怎样通过组合来使用之前定义的Weapon类
{
// 两个公开属性
    public string Name { get; set; }  //用于存储角色的名称
    public Weapon EquippedWeapon { get; set; }  //用于存储角色当前装备的武器,这个属性可以持有一个Weapon类的实例,或者为null(如果角色没有装备武器)

//构造函数,它接收一个参数name,用于在创建Character实例时设置角色的名称
    public Character(string name)
    {
        Name = name;
    }
//这是一个方法,用于为角色准备一个武器,这个方法接收一个Weapon实例作为参数,并将其分配给EquippedWeapon 属性。然后,它打印一条消息到控制台,表示角色已经装备了该武器。
    public void EquipWeapon(Weapon weapon)
    {
        EquippedWeapon = weapon;
        Console.WriteLine($"{Name} equipped {weapon.Name}!");
    }
// Attack方法用于执行攻击,它首先检查EquippedWeapon属性是否为null,如果角色有武器,那么就调用attack方法,要是么得,就在控制台上打印一条消息,说明角色无法攻击,因为没武器。
    public void Attack()
    {
        if (EquippedWeapon != null)
        {
            EquippedWeapon.Attack();
        }
        else
        {
            Console.WriteLine($"{Name} has no weapon to attack!");
        }
    }
}

现在,我们可以创建WeaponCharacter的实例,并将一个武器实体组合到一个角色中:

public class Program //Program是一个包含Main方法的类。Main方法是C#程序的入口点,也就是运行程序时第一个被调用的方法。
{
    public static void Main()
    {
        Weapon sword = new Weapon("Sword", 50); //创建武器对象,Sword 武器是一把剑,伤害是50
        Character knight = new Character("Knight"); //创建一个名为Knight(大侠)的角色

        knight.EquipWeapon(sword);//装备武器:这里调用了knight对象的EquipWeapon方法,并将之前创建的sword实例作为参数传递进去。这个方法会将sword对象赋值给knight对象的EquippedWeapon属性,并在控制台输出一条消息表明"Knight"装备了"Sword"。
        knight.Attack();//执行攻击:这行代码调用了knight对象的Attack方法。Attack方法检查EquippedWeapon是否不为空(在这个例子中,我们刚刚装备了"Sword"),然后调用EquippedWeapon(即sword对象)的Attack方法。这最终将在控制台输出一条消息,表明"Sword"攻击并造成了50点伤害。
    }
}

在这个例子中,当knight.Attack()被调用时,它实际上会调用EquippedWeaponAttack()方法,这是组合在工作的例子。这样,Character类通过组合Weapon实体来拓展它的功能。这种方式允许Character获得Weapon的功能并且可以动态地改变,这是相对于继承更加灵活的设计方法。文章来源地址https://www.toymoban.com/news/detail-835710.html

到了这里,关于C#中使用list封装多个同类型对象以及组合拓展实体的应用的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • Python-面向对象:面向对象、成员方法 、类和对象、构造方法、魔术方法、封装、继承、类型注解、多态(抽象类(接口))

    当前版本号[20230806]。 版本 修改说明 20230806 初版 生活中数据的组织 学校开学,要求学生填写自己的基础信息,一人发一张白纸,让学生自己填, 易出现内容混乱 但当改为登记表,打印出来让学生自行填写, 就会整洁明了 程序中数据的组织 在程序中简单使用变量来记录学

    2024年02月14日
    浏览(37)
  • 【C++历练之路】list的重要接口||底层逻辑的三个封装以及模拟实现

    W...Y的主页 😊 代码仓库分享💕  🍔前言: 在C++的世界中,有一种数据结构,它不仅像一个神奇的瑰宝匣,还像一位能够在数据的海洋中航行的智慧舵手。这就是C++中的list,一个引人入胜的工具,它以一种优雅而强大的方式管理着数据的舞台。想象一下,你有一个能够轻松

    2024年02月04日
    浏览(28)
  • 【深入浅出C#】章节 4: 面向对象编程基础:封装、继承和多态

    封装、继承和多态是面向对象编程中的核心概念,它们对于构建灵活、可扩展和可维护的软件系统至关重要。 封装(Encapsulation)通过将数据和相关操作封装在一个类中,隐藏内部实现细节,并提供公共接口来与外部进行交互。封装有助于保护数据的完整性和安全性,同时提

    2024年02月10日
    浏览(41)
  • 【深入浅出C#】章节 5: 高级面向对象编程:泛型编程和集合类型

    高级面向对象编程是在基础面向对象编程的基础上进一步深入和拓展的一种编程范式。它强调封装、继承和多态的概念,并引入了泛型编程和集合类型等高级特性。高级面向对象编程提供了更灵活、可扩展和可复用的代码结构,能够帮助开发者构建更复杂、更高效的应用程序

    2024年02月16日
    浏览(39)
  • 【C#】简单认识TransactionScope,以及常见的事务类型

    在实际项目开发时,后端编码少不了事务处理。 为什么要用事务,其中一个最直接的原因就是保持数据完整性和一致性 1)在C#中,事务是一组操作的逻辑单元,这些操作可以在一个单独的批处理中执行。 2)使用事务可以确保在操作期间的任何时候发生故障时,所有事务中的

    2024年02月10日
    浏览(28)
  • Python中List类型数据结构广泛应用于各种场景中。然而,在数据分析和可视化过程中,经常需要将List转换为Pandas的DataFrame对象。那么如何将...

    Python中List类型数据结构广泛应用于各种场景中。然而,在数据分析和可视化过程中,经常需要将List转换为Pandas的DataFrame对象。那么如何将List转换为DataFrame对象呢?本文将介绍如何使用Python中Pandas库将List转换为DataFrame,并进一步将其转换为字符串。 将Python List转换为Pandas D

    2024年02月15日
    浏览(39)
  • RPM常用命令以及组合使用场景

    本文分享自天翼云开发者社区《 RPM常用命令以及组合使用场景》,作者: 邬祥钊     当涉及到管理基于 Red Hat 系的 Linux 系统时,RPM (Red Hat Package Manager) 是一个常用的软件包管理器。以下是一些常用的 RPM 命令以及它们的组合使用场景: 常用命令: 1. rpm -ivh package.rpm :安装一

    2023年04月27日
    浏览(28)
  • 【C# 基础精讲】List 集合的使用

    在C#中, ListT 是一种非常常用的泛型集合类,用于存储一组相同类型的元素。 ListT 具有动态调整大小的能力,可以方便地添加、删除、查找和修改元素,非常灵活和高效。本文将详细介绍 ListT 集合的使用方法,包括创建 ListT 对象、添加元素、删除元素、查找元素、遍历集合

    2024年02月06日
    浏览(23)
  • 【mybatis-plus实体类复杂对象字段json自动相互转换,以及自定义字段类型解析器】

    引言: mybatis-plus集合对象字段json如何自动进行相互的转换? 怎样在使用mybatis-plus操作数据表的时候自动对实体类属性进行自动解析? 我们平时在做开发的时候,会遇到一个字段保存json串的情况。一般情况下mybatis-plus在做插入/更新之前将对象手动转换成json串,查询要用的时

    2023年04月13日
    浏览(89)
  • stream流的使用-获取list集合中对象的单个字段list集合,进行累加操作

    场景及代码案例源于实际项目 现存一list集合,其中保存了投资人的信息。 Person (name, age, money rateOfReturn) 其中的money表示投资人现有资产,rateOfReturn表示投资年回报率 需求: 1.计算投资人年龄之和; 2.根据现有资产及投资回报率,计算所有投资人一年后的资产总和; 实体

    2023年04月22日
    浏览(45)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包