4

私は 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 が奪われます。どうすればそれを止めることができますか?リストへの参照を追加したので、元のリストから削除されると思います。リストを複製する必要がありますか? それはうまくいくでしょうか?

それともデザインの問題ですか?

ありがとうございました!

4

3 に答える 3