8

この本CLR Via C#は、バイナリー・シリアライゼーションを介してオブジェクトを複製する簡単な方法を示しています。

StreamingContextStates.Clone作成時に次のBinaryFormatterように指定します。

var formatter = new BinaryFormatter
{
    Context = new StreamingContext(StreamingContextStates.Clone)
};

のドキュメントにStreamingContextStates.Cloneは、

オブジェクト グラフが複製されることを指定します。ユーザーは、複製されたグラフが同じプロセス内に引き続き存在し、アンマネージ リソースへのハンドルまたはその他の参照に安全にアクセスできると想定できます。

十分に公平ですが、これが実際に何を意味するのかはよくわかりません。これは実際に の動作をどのように変更しBinaryFormatterますか? このフラグを使用した場合の具体的な効果を挙げられる人はいますか?

4

1 に答える 1

2

ここではシリアライゼーションが主題です。
MS は、オブジェクトのシリアル化を可能にする「抽象的な」ミニ フレームワークを提供しました。
バイナリ フォーマッタは、そのミニフレームワークの概念を具体的に実装したものです。

開発者は、そのフレームワークの概念を使用して、独自のカスタム フォーマッタを作成するか
、シリアル化のさらなる実装を考えたミニ フレームワークを作成するときに MS 自体を作成することを選択できます。

そのため、フレームワークの一部としてこれらのフラグを提供しました。

特定の質問に答えるには、これらのフラグはバイナリフォーマッタには影響しません。オブジェクトグラフを追跡し、それを生データのバイトに変換するツールとして(必要に応じて)既に実装されているためです。
たとえば、オブジェクトをデータベース、ファイル、共有メモリなどに保存できる独自のシリアライザーを作成する場合、シリアライザーを使用するユーザーに対応するフラグを指定してもらいます。

私が2003年以降のMS開発者を完全に誤解していない限り.. :) (これは可能です!)

于 2013-07-04T16:09:47.453 に答える