一、list使用方法
在C#中,使用List<T>
集合是封裝多個同類型對象的常用方式。List<T>
是泛型集合,T
是集合中元素的類型。下面是一個簡單的例子,演示如何創(chuàng)建一個List<T>
,并向其中添加對象。
首先,假設(shè)我們有一個類,比如一個Person
類,它有一些屬性:
public class Person
{
public string Name { get; set; }
public int Age { get; set; }
// 假設(shè)還有其他屬性和方法
}
然后,我們可以這樣使用List<T>
:
using System;
using System.Collections.Generic; // 確保引入了這個命名空間
public class Program
{
public static void Main()
{
// 創(chuàng)建一個Person對象的List
List<Person> people = new List<Person>();
// 創(chuàng)建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}");
}
}
}
上面的代碼首先導(dǎo)入了必要的命名空間System.Collections.Generic
來使用List<T>
。然后,創(chuàng)建了一個Person
類型的List
,并添加了幾個Person
對象到這個列表中。foreach
循環(huán)被用來遍歷這個列表并打印每個人的信息。
這樣,我們就可以管理一個動態(tài)數(shù)組(列表)的同類型對象了,而且List<T>
提供了許多方便的方法,如Add
、Remove
、Find
等,來操作集合中的元素。
二、C#組合拓展實(shí)體
在C#中,“組合”(Composition)通常是指一種設(shè)計(jì)模式,它表明一個類包含了一個或者多個其他類的實(shí)例來實(shí)現(xiàn)代碼復(fù)用或者增加新的功能。這與"繼承"不同,繼承表示一個類是另一個類的子類。“拓展實(shí)體”(Extended Entities)一般指的是在組合模式中被用來拓展功能的那些包含的類的實(shí)例。 (定義有些復(fù)雜,不用管直接看例子也行)
組合被用于當(dāng)我們想要將一些行為或者狀態(tài)封裝到一個單獨(dú)的類中,并且希望通過含有這些類的實(shí)例的方式在多個地方重用它們。這通常是在希望建立一個對象,其行為是由多個源對象組成的時候,比如在創(chuàng)建一個復(fù)雜對象時,這個對象的功能需要來自于多個不同的源對象。
具體例子如下:
設(shè)想我們正在構(gòu)建一個游戲,有一個Weapon
類(武器)和一個Character
類(人物)。在這個游戲中,每個角色可以擁有不同的武器。在這里,Weapon
是一個可以被組合到Character
中的實(shí)體。
首先,定義一個Weapon
類:
public class Weapon //這個類代表游戲中的武器,它有兩個公共屬性和一個構(gòu)造函數(shù),以及一個用于執(zhí)行攻擊動作的方法
{
//這是兩個公開屬性
public string Name { get; set; } //武器的名稱
public int Damage { get; set; } //使用這個武器進(jìn)行攻擊時造成的傷害
//構(gòu)造函數(shù),用來創(chuàng)建weapon類的新實(shí)例,就是說我們創(chuàng)建Weapon類的時候,要提供Name和Damage來初始化對象
public Weapon(string name, int damage)
{
Name = name;
Damage = damage;
}
//一個不返回任何值的方法,調(diào)用這個方法后,會顯示武器的名稱和攻擊造成的傷害
public void Attack()
{
Console.WriteLine($"{Name} attacks for {Damage} damage!");
//在這個字符串中,{Name}和{Damage}是插值表達(dá)式,它們會被替換為對象當(dāng)前的Name和Damage屬性的值。
}
}
然后,定義一個Character
類,并在其中組合Weapon
:
public class Character //這個是游戲中的角色,并演示了怎樣通過組合來使用之前定義的Weapon類
{
// 兩個公開屬性
public string Name { get; set; } //用于存儲角色的名稱
public Weapon EquippedWeapon { get; set; } //用于存儲角色當(dāng)前裝備的武器,這個屬性可以持有一個Weapon類的實(shí)例,或者為null(如果角色沒有裝備武器)
//構(gòu)造函數(shù),它接收一個參數(shù)name,用于在創(chuàng)建Character實(shí)例時設(shè)置角色的名稱
public Character(string name)
{
Name = name;
}
//這是一個方法,用于為角色準(zhǔn)備一個武器,這個方法接收一個Weapon實(shí)例作為參數(shù),并將其分配給EquippedWeapon 屬性。然后,它打印一條消息到控制臺,表示角色已經(jīng)裝備了該武器。
public void EquipWeapon(Weapon weapon)
{
EquippedWeapon = weapon;
Console.WriteLine($"{Name} equipped {weapon.Name}!");
}
// Attack方法用于執(zhí)行攻擊,它首先檢查EquippedWeapon屬性是否為null,如果角色有武器,那么就調(diào)用attack方法,要是么得,就在控制臺上打印一條消息,說明角色無法攻擊,因?yàn)闆]武器。
public void Attack()
{
if (EquippedWeapon != null)
{
EquippedWeapon.Attack();
}
else
{
Console.WriteLine($"{Name} has no weapon to attack!");
}
}
}
現(xiàn)在,我們可以創(chuàng)建Weapon
和Character
的實(shí)例,并將一個武器實(shí)體組合到一個角色中:文章來源:http://www.zghlxwxcb.cn/news/detail-835710.html
public class Program //Program是一個包含Main方法的類。Main方法是C#程序的入口點(diǎn),也就是運(yùn)行程序時第一個被調(diào)用的方法。
{
public static void Main()
{
Weapon sword = new Weapon("Sword", 50); //創(chuàng)建武器對象,Sword 武器是一把劍,傷害是50
Character knight = new Character("Knight"); //創(chuàng)建一個名為Knight(大俠)的角色
knight.EquipWeapon(sword);//裝備武器:這里調(diào)用了knight對象的EquipWeapon方法,并將之前創(chuàng)建的sword實(shí)例作為參數(shù)傳遞進(jìn)去。這個方法會將sword對象賦值給knight對象的EquippedWeapon屬性,并在控制臺輸出一條消息表明"Knight"裝備了"Sword"。
knight.Attack();//執(zhí)行攻擊:這行代碼調(diào)用了knight對象的Attack方法。Attack方法檢查EquippedWeapon是否不為空(在這個例子中,我們剛剛裝備了"Sword"),然后調(diào)用EquippedWeapon(即sword對象)的Attack方法。這最終將在控制臺輸出一條消息,表明"Sword"攻擊并造成了50點(diǎn)傷害。
}
}
在這個例子中,當(dāng)knight.Attack()
被調(diào)用時,它實(shí)際上會調(diào)用EquippedWeapon
的Attack()
方法,這是組合在工作的例子。這樣,Character
類通過組合Weapon
實(shí)體來拓展它的功能。這種方式允許Character
獲得Weapon
的功能并且可以動態(tài)地改變,這是相對于繼承更加靈活的設(shè)計(jì)方法。文章來源地址http://www.zghlxwxcb.cn/news/detail-835710.html
到了這里,關(guān)于C#中使用list封裝多個同類型對象以及組合拓展實(shí)體的應(yīng)用的文章就介紹完了。如果您還想了解更多內(nèi)容,請?jiān)谟疑辖撬阉鱐OY模板網(wǎng)以前的文章或繼續(xù)瀏覽下面的相關(guān)文章,希望大家以后多多支持TOY模板網(wǎng)!