Поскольку вы не можете изменить тип объекта, у вас есть несколько вариантов:
- инкапсулируют
Base
- используйте конструктор, который копирует значения из
Base
- скопировать свойства из
Base
через отражение или подобное
Для последнего MiscUtil имеет полезный инструмент:
Base b= ...
Derived item = PropertyCopy<Derived>.CopyFrom(b);
Для инкапсуляции:
public class Derived
{
readonly Base b;
public Derived(Base b) {this.b=b;}
public List<Base> Children;
public string Member1 {get {return b.Member1;} set {...} }
public int Member2 {etc}
public float Member3 {etc}
public bool Member4 {etc}
}
Или как ручная копия:
public class Derived : Base
{
public Derived(Base b) {
this.Member1 = b.Member1;
// etc
}
// additional members...
}
или (комментарии) получить базу для копирования себя:
public class Derived : Base
{
public Derived(Base b) : base(b) { }
// additional members...
}
public class Base
{
// members not shown...
public Base() {}
protected Base(Base b) {
this.Member1 = b.Member1;
// etc
}
// additional members...
}
(где конструктор Base
инициализирует поля с Base
)