2

オブジェクトをコピーしようとしていますが、元のオブジェクトを変更せずに変更されます。関連するクラスは次のとおりです。

abstract class Upgrade {}

class Shield: Upgrade
{
  public Shield(Shield a) {}
}

問題は、別のクラスが「アップグレード」オブジェクトを取得したいが、そのクラスが取得するオブジェクトを認識していない場合です。例えば:

public void AddUpgrade(Upgrade upgrade)
{
    for (int i = 0;i<Aliens.Count; i++)
    {
        Aliens[i].AddUpgrade(What should i put here?);
    }
}

すべてのエイリアンに同じアップグレード参照を共有させたくないため、コピーコンストラクターを使用する必要がありますが、アップグレードは抽象クラスです。どうすればよいですか?

4

2 に答える 2

4

コピー コンストラクターの代わりに、ファクトリ(抽象ファクトリまたは一部のファクトリ メソッド) の使用を検討してください。

これらを使用すると、オブジェクトの構築を必要なだけ制御でき、継承チェーンに縛られることはありません (少なくとも、それほど多くはありません)。

于 2013-03-31T09:57:42.147 に答える
4

複製可能にすることができますUpgrade。つまり、それに追加Clone()すると (すべての子孫が実装されます)、次のようになります。

Aliens[i].AddUpgrade(upgrade.Clone());
于 2013-03-31T10:01:19.610 に答える