До .NET 4 CLR не предоставляла функциональные возможности, необходимые для реализации карты этой формы. В частности, Java предоставляет класс ReferenceQueue<T>
, который WeakHashMap
использует для управления слабыми ключами на карте. Поскольку в .NET нет эквивалента этому классу, нет чистого способа создать эквивалент Dictionary
.
В .NET 4 был добавлен новый класс ConditionalWeakTable<TKey, TValue>
в рамках усилий по улучшению способности CLR поддерживать динамические языки. Этот класс использует новый тип дескриптора сборки мусора, который реализован в самом CLR и представлен в mscorlib.dll через внутреннюю структуру DependentHandle
.
Это значит для вас следующее:
- Нет эквивалента
WeakHashMap
до .NET 4.
- Начиная с .NET 4 и продолжая, по крайней мере, до .NET 4.5.1, единственный способ поддержать функциональность
WeakHashMap
- это использовать класс ConditionalWeakTable
(который закрыт).
Дополнительная информация находится в следующем сообщении:
Можно ли создать по-настоящему слабый словарь в C #?