2013-03-31 5 views
1

Я пытаюсь скопировать объект, который затем будет изменен без изменения исходного объекта. Соответствующие классы:создание конструктора копирования с абстрактным классом

abstract class Upgrade {} 

class Shield: Upgrade 
{ 
    public Shield(Shield a) {} 
} 

Проблема заключается в том, когда другой класс хочет получить «Upgrade» объект, но класс не знает, какой объект он получить. Например:

public void AddUpgrade(Upgrade upgrade) 
{ 
    for (int i = 0;i<Aliens.Count; i++) 
    { 
     Aliens[i].AddUpgrade(What should i put here?); 
    } 
} 

я должен использовать конструктор копирования, потому что я не хочу всех иностранцев, чтобы одни и те же ссылки обновления, но Upgrade является абстрактным классом, чем то, что я должен делать?

ответ

4

Вы можете сделать Upgrade Cloneable, т.е. добавить Clone() к нему (каждый потомок будет осуществлять), и это будет что-то вроде:

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

спасибо за помощь, он отлично работает! – Michael

4

Вместо копирующих конструкторов рассмотрите возможность использования завода - либо abstract factory, либо factory methods.

Это позволит вам как можно больше контролировать конструкцию объекта, как вы пожелаете, не привязывая вас к цепочке наследования (по крайней мере, не так много).

+0

Очень хороший совет! +1 – duDE

Смежные вопросы