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

本文关键字:构造函数 复制 创建 抽象类 | 更新日期: 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());

考虑使用工厂来代替复制构造函数——抽象工厂或一些工厂方法。

这些将允许您尽可能多地控制对象构造,而不必将您束缚在继承链上(至少,没有太多)。