有没有办法将元数据粘贴到C#中的对象?
上下文:通过网络在对等体之间发送消息的框架.消息可以是任意可序列化的用户定义的.NET类型.
当然,当对等方发送消息时,框架可以将对象包装到Message类中,该类保存元数据,接收方可以将其解包.但是,对等方的处理方法可能决定将消息重新发送给另一个对等方 – 但是,我想保留原始元数据.除非重新发送,否则不应要求用户始终使用Message.RealMessage.
我考虑过将包装好的实例保存在字典中,然后重新查找是否在字典中已经有一个已包装的实例并重新发送该实例,但是,由于消息可能根本不会被重新发送(或重新发送多次),这将需要更多和更多的记忆.
有解决方案吗也许C#直接支持将附加信息粘贴到对象上?通常我会选择内部接口,但是,用户必须从框架的基类派生所有类,这是不可能的.
编辑:我想说“这里是WrappedMessage的对象,但你只能使用类T提供的接口”.
最佳答案 有一个
ConditionalWeakTable应该做你想要的比直接使用Dictionary更好一点.
报价:
Enables compilers to dynamically attach object fields to managed objects.
你可以忽略关于用于编译器的类的部分:-)