将元信息附加到.NET中的对象

ang*_*son 10 .net

我很确定这是一个重复的问题,但我找不到原文.

我得到一些我需要"附加"一些信息的对象.基本上,如果该对象回到同一段代码,我需要看到我以前见过它.

即.这样的事情:

Dictionary<WeakReference<ObjectType>, string> _Cache;
Run Code Online (Sandbox Code Playgroud)

注意那里的弱引用(我知道WeakReference不是通用的btw),我需要使缓存的键成为弱引用,以处理对象被GC控制掉的事实.

现在,我可以使缓存充满弱引用,但我似乎回想起.NET中已经存在的类似类型的系统,它与对象一起自动GC.

请注意,我不记得这样的开销,所以在确定这是一个比我自己的缓存更好/更好的解决方案之前,我将确保阅读有关主题.不幸的是我无法更改有问题的对象,所以我需要在其他地方跟踪这个元信息.

我的局限:

  • 对象不是我的,所以我不能以任何可能的方式改变它
  • 我不能从对象继承,因为它是密封的,此外,我了对象,我没有构造它们,所以我必须能够用一个后代类型的新对象替换一个实例有用
  • 对象是GC控制的,所以我不能只使用一个字典,它将慢慢填满,或者通过"引用"到非对象的对象,或者将保持对象,我需要一个弱的字典引用键(因此:自定义词典)
  • 这些对象,虽然我可以将它们封装在我自己的代码中并因此随身携带所需的信息,然后传递回我自己控制的框架,并从同一个回馈给我,因此我需要能够检索/仅使用相关对象查找旧信息

基本上,像:

PropertyAttacher.Attach(instance, "Name", name);
Run Code Online (Sandbox Code Playgroud)

我记得没错吗?涉及的课程是什么?

Sim*_*ier 6

您可能正在寻找.NET 4的 ConditionalWeakTable<TKey, TValue>