オブジェクトのタイプを変更できないため、いくつかのオプションがあります。
- カプセル化
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
'sコンストラクターはからのフィールドを初期化しますBase
)