我正在尝试复制一个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?);
}
}
我必须使用复制构造函数,因为我不希望所有外星人共享相同的升级引用,但升级是一个抽象类,而不是我应该做什么?
答案 0 :(得分:4)
考虑使用工厂 - abstract factory或某些factory methods,而不是复制构造函数。
这些将允许您尽可能多地控制对象构造,而不会将您束缚到继承链(至少,不多)。
答案 1 :(得分:4)
你可以使Upgrade
克隆,即向其中添加Clone()
(每个后代都将实现),它将变为:
Aliens[i].AddUpgrade(upgrade.Clone());