用抽象类创建复制构造函数
本文关键字:构造函数 复制 创建 抽象类 | 更新日期: 2023-09-27 18:06:56
我试图复制一个对象,然后将被修改,而不改变原始对象。相关的类是:
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?);
}
}
我必须使用复制构造函数,因为我不希望所有的外星人共享相同的升级引用,但升级是一个抽象类,那么我应该怎么做?
你可以使Upgrade
可克隆,即添加Clone()
(每个后代都将执行),它将变成如下内容:
Aliens[i].AddUpgrade(upgrade.Clone());
考虑使用工厂来代替复制构造函数——抽象工厂或一些工厂方法。
这些将允许您尽可能多地控制对象构造,而不必将您束缚在继承链上(至少,没有太多)。