Я уверен, что это дублированный вопрос, но я не могу найти оригинал.
Я получаю некоторые объекты, которые мне нужно "прикрепить" некоторую информацию. В принципе, если этот объект когда-либо возвращается к одному и тому же фрагменту кода, мне нужно увидеть, что я видел его раньше.
т. что-то вроде этого:
Dictionary<WeakReference<ObjectType>, string> _Cache;
Обратите внимание на слабую ссылку там (я знаю, что WeakReference не является общим битом), мне нужно сделать ключ кеша слабой ссылкой, чтобы справиться с тем, что объекты GC'ed из моего контроля.
Теперь я могу сделать этот кеш полным слабых ссылок, но я, похоже, вспоминаю аналогичный тип системы, уже существующий в .NET, который был GC'ed автоматически рядом с объектом.
Обратите внимание, что я не помню накладных расходов на это, поэтому я обязательно прочитаю эту тему, прежде чем решать, является ли это хорошим/лучшим решением, чем мой собственный кеш. К сожалению, я не могу изменить объект, о котором идет речь, поэтому мне нужно отслеживать эту метаинформацию где-то еще.
Мои ограничения:
- Объект не мой, поэтому я не могу его каким-либо образом изменить
- Я не могу наследовать от объекта, поскольку он запечатан, кроме того, мне предоставлены объекты, я их не создаю, поэтому я должен был бы заменить экземпляр новым объектом типа потомка для это полезно
- Объекты GC'ed из моего контроля, поэтому я не могу просто использовать словарь, который будет медленно заполняться либо "ссылками" на несуществующие объекты, либо будет храниться на объектах, мне нужен словарь со слабым ссылочным ключом (таким образом: пользовательский словарь)
- Объекты, хотя я мог инкапсулировать их в свой собственный код и, таким образом, переносить вместе с ним требуемую информацию, передается обратно в структуру из моего контроля и возвращается мне из того же самого, и поэтому мне нужно быть способный извлекать/искать старую информацию только с объектом, о котором идет речь.
В принципе, что-то вроде:
PropertyAttacher.Attach(instance, "Name", name);
Я правильно помню? Каковы классы?