B
から派生したクラスA
です。A
既存のオブジェクトから新しいオブジェクトを作成する必要がありますB
。
私のアプリケーションでは、 (多くの参照データを保持する)A
よりもはるかに軽量なインスタンスを多数使用するため、これが必要です。そうしないと、メモリが不足します。B
カスタムメソッドですべての'sフィールド'値を手動でコピーせずにに変換B
するにはどうすればよいですか?A
A
B
から派生したクラスA
です。A
既存のオブジェクトから新しいオブジェクトを作成する必要がありますB
。
私のアプリケーションでは、 (多くの参照データを保持する)A
よりもはるかに軽量なインスタンスを多数使用するため、これが必要です。そうしないと、メモリが不足します。B
カスタムメソッドですべての'sフィールド'値を手動でコピーせずにに変換B
するにはどうすればよいですか?A
A
継承の代わりに構成を使用することを検討してください(つまり、メンバーデータとしてB
プライベートが含まれています)。A
にメソッドを追加して、B
そのを返すようにします。これにより、残りのガベージコレクションが行われA
ている間も保持できます。B
キャストするだけです:
var a = (A)b;
また
var a = b as A;
別のクラスを拡張するクラスは、常により原始的なバージョンにキャストダウンできます。内部的には、これはまだ同じインスタンスでありB
、単にとして扱っていることに注意してくださいA
。Bのクローンを作成する場合は、Bにメソッドを追加する必要があります。
public class B : A
{
public A Clone()
{
var a = new A();
a.SomeProperty = this.SomeProperty;
...etc...
return a;
}
}