私は Java から C# に移行しており、いくつかのサンプル プログラムをコーディングしています。今、さまざまなオブジェクトのリスト (IUnit) に遭遇しました。リスト内の特定の値を呼び出してその値を変更すると、すべての値が変更されます。リストへの参照を追加しました-他のスタックオーバーフローの質問に従って。
だから私は次のクラスを持っています
interface IUnit
{
int HealthPoints { set; get; }
String ArmyType { get; }
}
これは、陸軍タイプ (海兵隊/歩兵) のリストを作成するために呼び出す基本クラスです。実装は、クラス内の値の変更を除いて同じです。
public class Infantry : IUnit
{
private int health = 100;
protected String armyType = "Infantry";
public int HealthPoints
{
get
{
return health;
}
set
{
health = value;
}
}
public String ArmyType
{
get
{
return armyType;
}
}
次に、次のコードでリストを初期化します
List<IUnit> army = new List<IUnit>();
Infantry infantry = new Infantry();
Marine marine = new Marine();
army.Add(Marine);
次に、健康ポイントから 25 を取り除く方法があります。
public void ShotRandomGuy(ref List<IUnit> army)
{
army[0].HealthPoints = army[0].HealthPoints - 25;
}
次に、以下に示すようにそのメソッドを呼び出します。
battle.ShotRandomGuy(ref army);
ただし、そのリスト内のすべてのオブジェクトから 25 が奪われます。どうすればそれを止めることができますか?リストへの参照を追加したので、元のリストから削除されると思います。リストを複製する必要がありますか? それはうまくいくでしょうか?
それともデザインの問題ですか?
ありがとうございました!