5

C#でメタデータをオブジェクトに接着する方法はありますか?

コンテキスト: ネットワークを介してピア間でメッセージを送信するフレームワーク。メッセージは、任意のシリアル化可能なユーザー定義の .NET 型にすることができます。

もちろん、メッセージがピアによって送信されると、フレームワークはオブジェクトをメタデータを保存する Message クラスにラップし、受信者はそれをラップ解除できます。ただし、ピアの処理方法により、メッセージを別のピアに再送信することが決定される可能性がありますが、元のメタデータを保持したいと考えています。Message.RealMessageユーザーは、再送信する場合を除き、常に使用する必要はありません。

ラップされたインスタンスをディクショナリに保持し、ディクショナリにラップされたインスタンスが既に存在する場合はルックアップを再送信して再送信することを考えましたが、メッセージがまったく再送信されない (または複数回再送信される) 可能性があるため、これにはさらに多くのものが必要になりますそしてより多くのメモリ。

解決策はありますか?おそらく、C# は追加情報をオブジェクトに貼り付けることを直接サポートしていますか? 通常は内部インターフェイスを使用しますが、ユーザーはすべてのクラスをフレームワークの基本クラスから派生させる必要があり、これは不可能です。

編集:「これはWrappedMessageのオブジェクトですが、クラスTによって提供されるインターフェースのみを使用できます」と言いたいです。

4

1 に答える 1

3

ディクショナリを直接使用するよりも少し良いことを行う必要があるConditionalWeakTableがあります。

引用するには:

コンパイラがオブジェクト フィールドを管理対象オブジェクトに動的にアタッチできるようにします。

コンパイラ用のクラスに関する部分は無視できます:-)

于 2013-09-01T15:55:16.533 に答える