2013-03-31 194 views
1

我試圖複製一個對象,然後將修改的拷貝構造函數,在不改變原來的對象。相關的類別是:當另一個階級想要得到一個「升級」對象,但該類犯規知道哪個對象得到它創建抽象類

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

您可以Upgrade可複製的,即加Clone()它(每一個後代將實施),它會成爲像:

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

感謝您的幫助,它非常完美! – Michael

4

除了複製構造函數之外,還可考慮使用工廠 - abstract factory或某些factory methods

,這將使你在對象的構造儘可能多的控制,如你所願,而不必被束縛到繼承鏈(至少,不是很多)。

+0

非常好的建議! +1 – duDE