我相信这是一个重复的问题,但我找不到原来的问题。
我正在获取一些对象,需要给它们“附加”一些信息。基本上,如果那个对象再次返回到同一段代码中,我需要看到我以前已经见过它。
例如,像这样:
Dictionary<WeakReference<ObjectType>, string> _Cache;
注意其中的弱引用(我知道 WeakReference 并不是泛型),我需要将缓存的键作为弱引用来处理,以处理对象在我的控制范围之外被 GC 回收的情况。现在,我可以让这个缓存充满弱引用,但我似乎记得 .NET 中已经存在类似的系统,该系统会自动随对象一起进行垃圾回收。
请注意,我不记得这样做的开销,因此在决定是否比我自己的缓存更好之前,我会确保阅读相关主题。不幸的是,我无法更改要处理的对象,因此需要在其他地方跟踪这些元信息。
我的限制:
- 对象不归我所有,因此我无法以任何方式更改它。 - 我不能从该对象继承,因为它是密封的,而且我只是收到了这些对象,而不是构造它们,因此我必须能够替换实例为一个后代类型的新对象,以便这种方法有用。 - 对象是在我控制之外被垃圾回收的,因此我不能仅使用字典,因为它会慢慢填满,或者将持有那些不存在的对象的“引用”,或者保留这些对象,我需要一个带有弱引用键的字典(因此是自定义字典)。 - 尽管我可以将对象封装到自己的代码中并携带所需的信息,但它会被传回到我无法控制的框架,并从框架中返回给我,因此我需要能够仅通过相关对象检索/查找旧的信息。
基本上,就像这样:
PropertyAttacher.Attach(instance, "Name", name);
我还记得吗?涉及了哪些类?