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 回答