使用抽象类创建复制构造函数

时间:2013-03-31 09:55:32

标签: c# oop

我正在尝试复制一个Object,然后修改它,而不更改原始对象。相关课程是:

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?);
    }
}

我必须使用复制构造函数,因为我不希望所有外星人共享相同的升级引用,但升级是一个抽象类,而不是我应该做什么?

2 个答案:

答案 0 :(得分:4)

考虑使用工厂 - abstract factory或某些factory methods,而不是复制构造函数。

这些将允许您尽可能多地控制对象构造,而不会将您束缚到继承链(至少,不多)。

答案 1 :(得分:4)

你可以使Upgrade克隆,即向其中添加Clone()(每个后代都将实现),它将变为:

Aliens[i].AddUpgrade(upgrade.Clone());