MemberwiseClone(Object fromObject, Object toObject)
人生で何度か使ってみたくなる機能です。ガベージを作成しないため、MemberwiseClone の現在の実装よりも大きな利点があります。
たとえば、1000 個のオブジェクトの配列があり、元のオブジェクトを破損することなく、SomeFunction() の呼び出しがオブジェクトに与える影響を反復してテストしたいとします。科学シミュレーションの世界ではよくあることです。
MemberwiseClone の既存の実装を使用すると、1000 個のオブジェクトに相当するガベージが作成されます。私が提案した方法が存在する場合、1 つのオブジェクトを作成し、それをすべての反復で再利用できます。これにより明らかにガベージがはるかに少なくなり、GC の作業もはるかに少なくなります。メソッドの実装がオリジナルとそれほど異なるとは想像できないので、フレームワークに追加するのにほとんど時間がかからなかったと思います。
フィールドごとにコピーするオブジェクトの GetCopy() メソッドを維持することは完全に可能ですが、これには 2 つの問題があります。何よりもまず、それを維持する必要があります。新しいフィールドが追加されるたびに、それを GetCopy に追加するのを忘れると、プログラムが壊れます。第 2 に、大きなオブジェクトの場合、クローンのメモリ ブロックをコピーするよりもはるかに効率が悪くなります。
すべてのフィールドを格納するためにオブジェクト内に構造体を埋め込む必要がありましたが、それらを GetCopy メソッドに追加することを覚えておく必要はなく、単一の割り当てでそれらすべてをコピーできます。これの問題は、コードが非常に醜くなることです。
では、このメソッドが実装されなかった正当な理由はありますか? それとも、私が想像しているほど役に立たないだけですか。