1

Bから派生したクラスAです。A既存のオブジェクトから新しいオブジェクトを作成する必要がありますB

私のアプリケーションでは、 (多くの参照データを保持する)Aよりもはるかに軽量なインスタンスを多数使用するため、これが必要です。そうしないと、メモリが不足します。B

カスタムメソッドですべての'sフィールド'値を手動でコピーせずにに変換Bするにはどうすればよいですか?AA

4

2 に答える 2

2

継承の代わりに構成を使用することを検討してください(つまり、メンバーデータとしてBプライベートが含まれています)。Aにメソッドを追加して、Bそのを返すようにします。これにより、残りのガベージコレクションが行われAている間も保持できます。B

于 2012-11-08T21:50:48.090 に答える
0

キャストするだけです:

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;
    }
}
于 2012-11-08T21:47:04.163 に答える